You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
7.1 KiB
209 lines
7.1 KiB
import 'dart:io'; |
|
|
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter/rendering.dart'; |
|
import 'package:flutter/services.dart'; |
|
import 'package:huixiang/generated/l10n.dart'; |
|
import 'package:huixiang/utils/font_weight.dart'; |
|
import 'dart:ui' as ui; |
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
import 'package:path_provider/path_provider.dart'; |
|
import 'package:qr_flutter/qr_flutter.dart'; |
|
import 'package:sharesdk_plugin/sharesdk_plugin.dart'; |
|
|
|
class QrShareImagePage extends StatefulWidget { |
|
String mobile; |
|
|
|
QrShareImagePage(this.mobile); |
|
|
|
@override |
|
State<StatefulWidget> createState() { |
|
return _QrShareImagePage(); |
|
} |
|
} |
|
|
|
class _QrShareImagePage extends State<QrShareImagePage> { |
|
@override |
|
Widget build(BuildContext context) { |
|
return Column( |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
children: [ |
|
RepaintBoundary( |
|
key: globalKey, |
|
child: Container( |
|
width: MediaQuery.of(context).size.width * 0.8, |
|
height: (MediaQuery.of(context).size.width * 0.8) * 1.36, |
|
decoration: BoxDecoration( |
|
borderRadius: BorderRadius.circular(10.w), |
|
), |
|
child: Column( |
|
children: [ |
|
Image.asset( |
|
"assets/image/share_image_bg.png", |
|
height: (MediaQuery.of(context).size.width * 0.8) * 0.47, |
|
width: (MediaQuery.of(context).size.width * 0.8), |
|
), |
|
Expanded( |
|
child: Container( |
|
decoration: BoxDecoration( |
|
color: Colors.white, |
|
borderRadius: BorderRadius.vertical( |
|
bottom: Radius.circular(10.w), |
|
), |
|
), |
|
child: Column( |
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Container( |
|
width: 206.w, |
|
height: 30.h, |
|
child: Text( |
|
S.of(context).yaoqingrenshoujihao_("${widget.mobile.substring(0, 3)}****${widget.mobile.substring(7, 11)}"), |
|
style: TextStyle( |
|
fontWeight: MyFontWeight.semi_bold, |
|
fontSize: 12.sp, |
|
color: Color(0xFF2E3552), |
|
), |
|
), |
|
alignment: Alignment.center, |
|
decoration: BoxDecoration( |
|
color: Color(0xFFFFC93B), |
|
border: Border.all( |
|
color: Color(0xFF2E3552), |
|
width: 1, |
|
), |
|
), |
|
), |
|
Container( |
|
margin: EdgeInsets.symmetric(horizontal: 68.w), |
|
decoration: BoxDecoration( |
|
border: Border.all( |
|
color: Color(0xFF2E3552), |
|
width: 1, |
|
), |
|
), |
|
child: AspectRatio( |
|
aspectRatio: 1, |
|
child: QrImage( |
|
data: "http://mp.hx.lotus-wallet.com/pages/invite/index?mobile=${widget.mobile ?? ""}", |
|
version: QrVersions.auto, |
|
size: 200.w, |
|
gapless: true, |
|
), |
|
), |
|
), |
|
Container( |
|
margin: EdgeInsets.only(left: 16.w, right: 24.w), |
|
child: Text( |
|
S.of(context).saomashibieguanzhugongzonghao, |
|
textAlign: TextAlign.center, |
|
style: TextStyle( |
|
color: Color(0xFF2E3552), |
|
fontSize: 14.sp, |
|
fontWeight: MyFontWeight.semi_bold, |
|
), |
|
), |
|
), |
|
], |
|
), |
|
), |
|
flex: 1, |
|
), |
|
], |
|
), |
|
), |
|
), |
|
SizedBox( |
|
height: 15, |
|
), |
|
TextButton( |
|
onPressed: () { |
|
widgetToImage(); |
|
}, |
|
style: ButtonStyle( |
|
backgroundColor: MaterialStateProperty.all( |
|
Color(0xFFFFC93B), |
|
), |
|
shape: MaterialStateProperty.all( |
|
RoundedRectangleBorder( |
|
side: BorderSide( |
|
color: Color(0xFF2E3552), |
|
width: 1, |
|
), |
|
borderRadius: BorderRadius.circular(5), |
|
), |
|
), |
|
elevation: MaterialStateProperty.all(3), |
|
shadowColor: MaterialStateProperty.all(Colors.amber), |
|
padding: MaterialStateProperty.all( |
|
EdgeInsets.symmetric( |
|
vertical: 5.h, |
|
horizontal: 20.w, |
|
), |
|
), |
|
), |
|
child: Text( |
|
S.of(context).fenxiangzhiweixin, |
|
style: TextStyle( |
|
color: Color(0xFF2E3552), |
|
fontSize: 18.sp, |
|
fontWeight: MyFontWeight.semi_bold), |
|
), |
|
), |
|
], |
|
); |
|
} |
|
|
|
GlobalKey globalKey = GlobalKey(); |
|
|
|
widgetToImage() async { |
|
BuildContext buildContext = globalKey.currentContext; |
|
if (null != buildContext) { |
|
RenderRepaintBoundary boundary = buildContext.findRenderObject(); |
|
ui.Image image = await boundary.toImage(pixelRatio: 3); |
|
ByteData byteData = |
|
await image.toByteData(format: ui.ImageByteFormat.png); |
|
|
|
String filePath = ""; |
|
if (Platform.isAndroid) { |
|
filePath = (await getExternalStorageDirectory()).path; |
|
} else { |
|
filePath = (await getApplicationDocumentsDirectory()).path; |
|
} |
|
filePath = "$filePath/${DateTime.now().millisecondsSinceEpoch}.png"; |
|
|
|
File file = File(filePath); |
|
if (!file.existsSync()) { |
|
file.createSync(); |
|
print("object: ${file.path}"); |
|
} |
|
file.writeAsBytesSync(byteData.buffer.asUint8List()); |
|
|
|
SSDKMap params = SSDKMap() |
|
..setGeneral( |
|
"", |
|
"", |
|
[ |
|
file.path, |
|
], |
|
"", |
|
file.path, |
|
"", |
|
"", |
|
"", |
|
"", |
|
"", |
|
SSDKContentTypes.image, |
|
); |
|
|
|
SharesdkPlugin.share(ShareSDKPlatforms.wechatSession, params, |
|
(state, userData, contentEntity, error) { |
|
print("share state !$state"); |
|
print("share userData !$userData"); |
|
print("share contentEntity !$contentEntity"); |
|
print("share error !$error"); |
|
}); |
|
} |
|
} |
|
}
|
|
|