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.
 
 
 
 
 
 

235 lines
7.8 KiB

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/qr/qr_share_image.dart';
import 'package:huixiang/retrofit/data/user_info.dart';
import 'package:huixiang/utils/font_weight.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';
class QrSharePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _QrSharePage();
}
}
class _QrSharePage extends State<QrSharePage> {
String phone = "";
@override
void initState() {
super.initState();
SharedPreferences.getInstance().then((value) {
if (value.getString('user') != null && value.getString('user') != "") {
phone =
UserInfo.fromJson(jsonDecode(value.getString('user'))).inviteCode;
setState(() {});
}
});
buildImageInfo();
}
@override
void dispose() {
SmartDialog.dismiss();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (height == null || height == 0)
height = MediaQuery.of(context).size.height;
return Scaffold(
appBar: MyAppBar(
title: "",
titleColor: Colors.black,
background: Color(0xFFF7F7F7),
leadingColor: Colors.black,
action: Container(
alignment: Alignment.center,
margin: EdgeInsets.only(right: 16.w),
child: InkWell(
onTap: () {
if (phone == null || phone == "") return;
SmartDialog.show(
widget: QrShareImagePage(phone),
clickBgDismissTemp: true,
isPenetrateTemp: false,
);
},
child: Icon(
Icons.share,
color: Colors.black,
size: 24.w,
),
),
),
),
body: SingleChildScrollView(
child: Container(
height: height,
child: Stack(
children: [
Positioned(
child: Image.asset(
"assets/image/qr_share_bg.webp",
fit: BoxFit.fill,
),
top: 0,
left: 0,
bottom: 0,
right: 0,
),
Positioned(
child: Container(
width: MediaQuery.of(context).size.width,
height: height * 0.635,
padding: EdgeInsets.symmetric(
vertical: 28.h,
horizontal: 19.w,
),
child: Stack(
children: [
Positioned(
child: Image.asset(
"assets/image/qr_share_info_bg.webp",
fit: BoxFit.fill,
),
top: 0,
left: 0,
bottom: 0,
right: 0,
),
Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
shareTypeTitle(S.of(context).wodeyaoqingma),
Container(
margin: EdgeInsets.only(left: 16.w, right: 24.w),
child: GestureDetector(
child: SelectableText(
// S.of(context).baocunsaoma,
phone,
textAlign: TextAlign.center,
style: TextStyle(
color: Color(0xFF2E3552),
fontSize: 40.sp,
fontWeight: MyFontWeight.semi_bold,
),
),
onTap: this.copy(phone),
)),
// Container(
// width: 152.w,
// height: 152.w,
// decoration: BoxDecoration(
// border: Border.all(
// color: Color(0xFF2E3552),
// width: 1,
// ),
// ),
// child: QrImage(
// data: "http://mp.hx.lotus-wallet.com/pages/invite/index?mobile=${phone ?? ""}",
// version: QrVersions.auto,
// size: 200.w,
// gapless: true,
// ),
// ),
shareTypeTitle(S.of(context).haoyoujiangliguize),
Container(
margin: EdgeInsets.only(left: 16.w, right: 24.w),
child: Text(
// S.of(context).fenxiangyaoqing,
S.of(context).fenxiangyaoqingma,
textAlign: TextAlign.center,
style: TextStyle(
height: 1.5,
color: Color(0xFF2E3552),
fontSize: 16.sp,
fontWeight: MyFontWeight.regular,
),
),
),
// Container(
// margin: EdgeInsets.only(left: 16.w, right: 24.w),
// child: Text(
// // S.of(context).fenxiangyaoqing,
// S.of(context).beiyaoqingdejiangli,
// textAlign: TextAlign.center,
// style: TextStyle(
// color: Color(0xFF2E3552),
// fontSize: 16.sp,
// fontWeight: MyFontWeight.regular,
// ),
// ),
// ),
SizedBox(
height: 1.h,
),
],
),
],
),
),
left: 0,
bottom: 0,
right: 0,
),
],
),
),
),
);
}
Widget shareTypeTitle(typeText) {
return Container(
width: 140.w,
height: 30.h,
child: Text(
typeText,
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 16.sp,
color: Color(0xFF2E3552),
),
),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFFC93B),
border: Border.all(
color: Color(0xFF2E3552),
width: 1,
),
),
);
}
Image image;
double height;
buildImageInfo() async {
image = Image.asset("assets/image/qr_share_bg_yq.webp");
image.image
.resolve(ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
height = info.image.height.toDouble();
setState(() {});
}));
}
copy(String phone) {
print("..." + phone);
Clipboard.setData(ClipboardData(text: phone));
}
}