diff --git a/circle_app/assets/images/mine/add_code_icon.png b/circle_app/assets/images/mine/add_code_icon.png
new file mode 100644
index 0000000..a2d51d6
Binary files /dev/null and b/circle_app/assets/images/mine/add_code_icon.png differ
diff --git a/circle_app/assets/images/mine/hb.png b/circle_app/assets/images/mine/hb.png
new file mode 100644
index 0000000..a147ca4
Binary files /dev/null and b/circle_app/assets/images/mine/hb.png differ
diff --git a/circle_app/assets/images/mine/invite_count_bg.png b/circle_app/assets/images/mine/invite_count_bg.png
new file mode 100644
index 0000000..f8832d5
Binary files /dev/null and b/circle_app/assets/images/mine/invite_count_bg.png differ
diff --git a/circle_app/assets/images/mine/invite_icon.png b/circle_app/assets/images/mine/invite_icon.png
new file mode 100644
index 0000000..be4c34e
Binary files /dev/null and b/circle_app/assets/images/mine/invite_icon.png differ
diff --git a/circle_app/assets/images/mine/invite_line.png b/circle_app/assets/images/mine/invite_line.png
new file mode 100644
index 0000000..2fb034e
Binary files /dev/null and b/circle_app/assets/images/mine/invite_line.png differ
diff --git a/circle_app/assets/images/mine/invite_right_icon.png b/circle_app/assets/images/mine/invite_right_icon.png
new file mode 100644
index 0000000..1290742
Binary files /dev/null and b/circle_app/assets/images/mine/invite_right_icon.png differ
diff --git a/circle_app/assets/images/mine/invite_sys_bg.png b/circle_app/assets/images/mine/invite_sys_bg.png
new file mode 100644
index 0000000..238b719
Binary files /dev/null and b/circle_app/assets/images/mine/invite_sys_bg.png differ
diff --git a/circle_app/assets/images/mine/invite_title.png b/circle_app/assets/images/mine/invite_title.png
new file mode 100644
index 0000000..6c1bee7
Binary files /dev/null and b/circle_app/assets/images/mine/invite_title.png differ
diff --git a/circle_app/assets/images/mine/invite_vip_desc.png b/circle_app/assets/images/mine/invite_vip_desc.png
new file mode 100644
index 0000000..eeb4bfb
Binary files /dev/null and b/circle_app/assets/images/mine/invite_vip_desc.png differ
diff --git a/circle_app/assets/images/mine/qq.png b/circle_app/assets/images/mine/qq.png
new file mode 100644
index 0000000..98f50f0
Binary files /dev/null and b/circle_app/assets/images/mine/qq.png differ
diff --git a/circle_app/assets/images/mine/share_content_bg.png b/circle_app/assets/images/mine/share_content_bg.png
new file mode 100644
index 0000000..7aed732
Binary files /dev/null and b/circle_app/assets/images/mine/share_content_bg.png differ
diff --git a/circle_app/assets/images/mine/share_title.png b/circle_app/assets/images/mine/share_title.png
new file mode 100644
index 0000000..76badff
Binary files /dev/null and b/circle_app/assets/images/mine/share_title.png differ
diff --git a/circle_app/assets/images/mine/wb.png b/circle_app/assets/images/mine/wb.png
new file mode 100644
index 0000000..f6a314f
Binary files /dev/null and b/circle_app/assets/images/mine/wb.png differ
diff --git a/circle_app/assets/images/mine/wx.png b/circle_app/assets/images/mine/wx.png
new file mode 100644
index 0000000..001705a
Binary files /dev/null and b/circle_app/assets/images/mine/wx.png differ
diff --git a/circle_app/assets/images/mine/wxq.png b/circle_app/assets/images/mine/wxq.png
new file mode 100644
index 0000000..fd71535
Binary files /dev/null and b/circle_app/assets/images/mine/wxq.png differ
diff --git a/circle_app/ios/Runner.xcodeproj/project.pbxproj b/circle_app/ios/Runner.xcodeproj/project.pbxproj
index 6f3ed21..dbe00c1 100644
--- a/circle_app/ios/Runner.xcodeproj/project.pbxproj
+++ b/circle_app/ios/Runner.xcodeproj/project.pbxproj
@@ -141,7 +141,6 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
596550B3B6FD4574F751EEF4 /* [CP] Embed Pods Frameworks */,
- 043A78F4D9CB2782E40309BF /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -200,23 +199,6 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 043A78F4D9CB2782E40309BF /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Copy Pods Resources";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
diff --git a/circle_app/ios/Runner/Info.plist b/circle_app/ios/Runner/Info.plist
index 3f0d656..a2c4d60 100644
--- a/circle_app/ios/Runner/Info.plist
+++ b/circle_app/ios/Runner/Info.plist
@@ -2,6 +2,8 @@
+ NSPhotoLibraryAddUsageDescription
+ 是否同意应用将图片保存到相册中?
LSApplicationQueriesSchemes
weixinULAPI
@@ -62,5 +64,7 @@
30dc517b609c8aefe297b9ac3eb8dbde
UIViewControllerBasedStatusBarAppearance
+ UIApplicationSupportsIndirectInputEvents
+
diff --git a/circle_app/lib/app/invite/logic.dart b/circle_app/lib/app/invite/logic.dart
index d986c1f..363b3cd 100644
--- a/circle_app/lib/app/invite/logic.dart
+++ b/circle_app/lib/app/invite/logic.dart
@@ -1,3 +1,6 @@
+import 'package:circle_app/network/api.dart';
+import 'package:circle_app/network/dio_manager.dart';
+import 'package:circle_app/util/util.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
@@ -5,5 +8,157 @@ import 'state.dart';
class InviteLogic extends GetxController {
final InviteState state = InviteState();
+ bool isLoad = true;
TextEditingController codeEditingController = TextEditingController();
+
+ Data? homeData;
+
+ List sysData = [];
+
+
+ @override
+ void onInit() {
+ // TODO: implement onInit
+ super.onInit();
+ loadData();
+ }
+
+ void loadData() async {
+ var data = await DioManager.instance.get(url: Api.inviteMainPage);
+ if (data['code'] == 200) {
+ Autogenerated result = Autogenerated.fromJson(data);
+
+ homeData = result.data;
+
+ }
+ var recorddata = await DioManager.instance.get(url: Api.inviteSysRecord);
+ if (recorddata['code'] == 200) {
+ sysData = recorddata['data'];
+ isLoad = false;
+ update();
+
+ }
+
+ }
+
+ addCode(String code) async {
+
+
+ var recorddata = await DioManager.instance.post(url: Api.inviteFillIn,params: {'invite_code':code});
+ if (recorddata['code'] == 200) {
+ showOKToast('填写成功');
+ } else {
+ showOKToast(recorddata['msg']);
+ }
+ }
+}
+
+
+class Autogenerated {
+ int? code;
+ Data? data;
+ String? msg;
+
+ Autogenerated({this.code, this.data, this.msg});
+
+ Autogenerated.fromJson(Map json) {
+ code = json['code'];
+ data = json['data'] != null ? new Data.fromJson(json['data']) : null;
+ msg = json['msg'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['code'] = this.code;
+ if (this.data != null) {
+ data['data'] = this.data!.toJson();
+ }
+ data['msg'] = this.msg;
+ return data;
+ }
+}
+
+class Data {
+ int? achieveCount;
+ int? achieveRewardDay;
+ int? diffAwardCount;
+ List? inviteAwardConf;
+ int? inviteAwardCount;
+ String? inviteCode;
+ String? link;
+ int? inviteCount;
+
+ Data(
+ {this.achieveCount,
+ this.achieveRewardDay,
+ this.diffAwardCount,
+ this.inviteAwardConf,
+ this.inviteAwardCount,
+ this.inviteCode,
+ this.link,
+ this.inviteCount});
+
+ Data.fromJson(Map json) {
+ achieveCount = json['achieve_count'];
+ achieveRewardDay = json['achieve_reward_day'];
+ diffAwardCount = json['diff_award_count'];
+ if (json['invite_award_conf'] != null) {
+ inviteAwardConf = [];
+ json['invite_award_conf'].forEach((v) {
+ inviteAwardConf!.add(new InviteAwardConf.fromJson(v));
+ });
+ }
+ inviteAwardCount = json['invite_award_count'];
+ inviteCode = json['invite_code'];
+ link = json['site_link'];
+ inviteCount = json['invite_count'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['achieve_count'] = this.achieveCount;
+ data['achieve_reward_day'] = this.achieveRewardDay;
+ data['diff_award_count'] = this.diffAwardCount;
+ if (this.inviteAwardConf != null) {
+ data['invite_award_conf'] =
+ this.inviteAwardConf!.map((v) => v.toJson()).toList();
+ }
+ data['invite_award_count'] = this.inviteAwardCount;
+ data['invite_code'] = this.inviteCode;
+ data['invite_count'] = this.inviteCount;
+ return data;
+ }
+}
+
+class InviteAwardConf {
+ int? achieveId;
+ int? inviteCount;
+ int? isAchieved;
+ double? rebateRate;
+ int? rewardDay;
+
+ InviteAwardConf(
+ {this.achieveId,
+ this.inviteCount,
+ this.isAchieved,
+ this.rebateRate,
+ this.rewardDay});
+
+ InviteAwardConf.fromJson(Map json) {
+ achieveId = json['achieve_id'];
+ inviteCount = json['invite_count'];
+ isAchieved = json['is_achieved'];
+ rebateRate = json['rebate_rate'];
+ rewardDay = json['reward_day'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['achieve_id'] = this.achieveId;
+ data['invite_count'] = this.inviteCount;
+ data['is_achieved'] = this.isAchieved;
+ data['rebate_rate'] = this.rebateRate;
+ data['reward_day'] = this.rewardDay;
+ return data;
+ }
}
diff --git a/circle_app/lib/app/invite/share.dart b/circle_app/lib/app/invite/share.dart
new file mode 100644
index 0000000..b41f2d7
--- /dev/null
+++ b/circle_app/lib/app/invite/share.dart
@@ -0,0 +1,421 @@
+import 'package:cached_network_image/cached_network_image.dart';
+import 'package:circle_app/app/minefragment/logic.dart';
+import 'package:circle_app/util/util.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+import 'package:get/get_core/src/get_main.dart';
+import 'package:image_gallery_saver/image_gallery_saver.dart';
+import 'dart:ui' as ui;
+
+import 'package:qr_flutter/qr_flutter.dart';
+
+class Share extends StatefulWidget {
+ String code;
+ String link;
+ Share(this.code, this.link);
+
+ @override
+ State createState() => _ShareState();
+}
+
+class _ShareState extends State {
+ GlobalKey _globalKey = GlobalKey();
+
+ MinefragmentLogic logic = Get.find();
+
+ @override
+ Widget build(BuildContext context) {
+ // TODO: add widget build method
+ return Scaffold(
+ backgroundColor: Colors.transparent,
+ body: Container(
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ Positioned(
+ top: 100.sp,
+ child: SingleChildScrollView(
+ child: RepaintBoundary(
+ key: _globalKey,
+ child: Container(
+ height: 514.sp,
+ width: Get.width - 40.sp,
+ // margin: EdgeInsets.only(left: 20.sp, right: 20.sp),
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: AssetImage(getCircleImage("open_vip_bg")),
+ fit: BoxFit.fill,
+ ),
+ ),
+ child: Column(
+ children: [
+ Container(
+ width: Get.width,
+ height: 65.sp,
+ margin: EdgeInsets.only(left: 15.sp, top: 20.sp),
+ child: Row(
+ children: [
+ Center(
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ Container(
+ width: 47.sp,
+ height: 47.sp,
+ decoration: const BoxDecoration(
+ shape: BoxShape.circle,
+ gradient: LinearGradient(
+ colors: [
+ Color(0xFFDD3DF4),
+ Color(0xFF30FFD9)
+ ],
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ ),
+ ),
+ ),
+ SizedBox(
+ width: 46.sp,
+ height: 46.sp,
+ child: _buildAvatar1(logic),
+ )
+ ],
+ ),
+ ),
+ Expanded(
+ child: Container(
+ padding: EdgeInsets.only(left: 10.sp),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ _buildNameRow(logic),
+ SizedBox(height: 10.sp),
+ _buildInfoRow(logic),
+ ],
+ ),
+ ),
+ ),
+ Image.asset(
+ getBaseImage("ic_launcher"),
+ width: 80.sp,
+ height: 80.sp,
+ )
+ ],
+ ),
+ ),
+ Expanded(
+ child: Container(
+ // color: Colors.red,
+ child: Column(
+ children: [
+ SizedBox(
+ height: 20.sp,
+ ),
+ Image.asset(
+ getMineImage('share_title'),
+ height: 22.sp,
+ ),
+ SizedBox(
+ height: 10.sp,
+ ),
+ Image.asset(
+ getMineImage('share_content_bg'),
+ fit: BoxFit.fill,
+ ),
+ ],
+ ),
+ )),
+ Container(
+ height: 90.sp,
+ // color: Colors.yellow,
+ // width: Get.width-40.sp,
+ margin: EdgeInsets.only(bottom: 15.sp),
+ padding: EdgeInsets.only(left: 15.sp, right: 15.sp),
+ child: Row(
+ // mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Expanded(
+ child: Container(
+ // color: Colors.red,
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Container(
+ // color: Colors.blue,
+ child: Row(
+ children: [
+ Text(
+ '专属邀请码',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 16.sp),
+ ),
+ SizedBox(
+ width: 8.sp,
+ ),
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.only(
+ left: 10.sp, right: 10.sp),
+ height: 25.sp,
+ decoration: BoxDecoration(
+ // color: Color(0xFFDC5BFD),
+ gradient:
+ const LinearGradient(
+ colors: [
+ Color(0xFF0DF5F7),
+ Color(0xFFD263FB)
+ ],
+ begin:
+ Alignment.centerLeft,
+ end:
+ Alignment.centerRight,
+ ),
+ borderRadius:
+ BorderRadius.circular(
+ 12.5.sp)),
+ child: Text(
+ widget.code,
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 12.sp),
+ ),
+ )
+ ],
+ ),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: 10.sp),
+ width: Get.width - 200.sp,
+ child: Text(
+ '扫码或长按识别下载APP,认识更多小众圈子里的人,给生活带来更多乐趣~',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 12.sp)),
+ )
+ ],
+ ),
+ ),
+ ),
+ // Image.asset(getBaseImage("ic_launcher"),width: 80.sp,height: 80.sp,)
+ QrImageView(
+ data: widget.link,
+ padding: EdgeInsets.zero,
+ version: QrVersions.auto,
+ size: 80.sp,
+ gapless: false,
+ backgroundColor: Colors.white,
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ )),
+ ),
+ ),
+ Positioned(
+ bottom: 0,
+ child: SafeArea(
+ top: false,
+ child: Container(
+ height: 164.sp,
+ width: Get.width,
+ color: Color(0xFF292247),
+ child: Column(
+ children: [
+ Expanded(
+ child: Container(
+ padding: EdgeInsets.only(
+ top: 15.sp, left: 15.sp, right: 15.sp),
+ alignment: Alignment.center,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ shareAction('wx', '微信', () {}),
+ shareAction('wxq', '朋友圈', () {}),
+ shareAction('qq', 'QQ', () {
+ copyInviteText(logic.name);
+ }),
+ shareAction('wb', '微博', () {
+ copyInviteText(logic.name);
+ }),
+ shareAction('hb', '保存海报', () {
+ _saveLocalImage();
+ }),
+ ],
+ ),
+ )),
+ Container(
+ height: 1.sp,
+ color: Color(0x33FFFFFF),
+ ),
+ GestureDetector(
+ onTap: () {
+ Get.back();
+ },
+ child: Container(
+ height: 67.sp,
+ alignment: Alignment.center,
+ child: Text(
+ '取消',
+ style: TextStyle(
+ color: Colors.white, fontSize: 14.sp),
+ ),
+ ),
+ )
+ ],
+ ),
+ )))
+ ],
+ ),
+ ),
+ );
+ }
+
+ Widget _buildAvatar1(MinefragmentLogic logic) {
+ return ClipOval(
+ child: GestureDetector(
+ onTap: () {
+ if (logic.userInfoBean != null) {
+ var imgList = [];
+ imgList.add(logic.userInfoBean!.avatar);
+ // Get.toNamed(AppRoutes.Swiper,arguments:imgList);
+ // Get.toNamed(AppRoutes.Swiper, arguments: {
+ // 'imaglist': imgList,
+ // 'index': 0
+ // });
+ }
+ },
+ child: logic.userInfoBean == null
+ ? SizedBox(
+ width: 63.sp,
+ height: 63.sp,
+ )
+ : CachedNetworkImage(
+ fit: BoxFit.cover,
+ placeholder: null,
+ imageUrl: logic.avatar,
+ width: 63.sp,
+ height: 63.sp,
+ ),
+ ),
+ );
+ }
+
+ Widget _buildNameRow(MinefragmentLogic logic) {
+ return Container(
+ margin: EdgeInsets.only(top: 6.sp),
+ child: Row(
+ // mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ logic.name,
+ style: TextStyle(
+ color: const Color.fromRGBO(247, 250, 250, 1.0),
+ fontSize: 16.sp,
+ ),
+ ),
+ SizedBox(
+ width: 4.sp,
+ ),
+ Container(
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(17),
+ gradient: const LinearGradient(
+ colors: [
+ Color.fromRGBO(141, 255, 248, 1.0),
+ Color.fromRGBO(181, 211, 255, 1.0),
+ ],
+ begin: Alignment.centerLeft,
+ end: Alignment.centerRight,
+ ),
+ ),
+ padding: EdgeInsets.only(
+ top: 2.sp, bottom: 2.sp, left: 10.sp, right: 10.sp),
+ child: Text(
+ logic.ageMsg,
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 10.sp,
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+ Widget _buildInfoRow(MinefragmentLogic logic) {
+ return Row(
+ children: [
+ Text('邀请您加入',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 12.sp,
+ )),
+ Text('【微乐园APP】',
+ style: TextStyle(
+ color: Color(0xFF0DF5F7),
+ fontSize: 12.sp,
+ )),
+ ],
+ );
+ }
+
+ shareAction(String img, String name, GestureTapCallback onTap) {
+ return GestureDetector(
+ onTap: onTap,
+ child: Container(
+ child: Column(
+ children: [
+ Image.asset(
+ getMineImage(img),
+ width: 40.sp,
+ ),
+ SizedBox(
+ height: 10.sp,
+ ),
+ Text(
+ name,
+ style: TextStyle(color: Colors.white, fontSize: 12.sp),
+ )
+ ],
+ ),
+ ),
+ );
+ }
+
+ _saveLocalImage() async {
+ RenderRepaintBoundary boundary =
+ _globalKey.currentContext!.findRenderObject() as RenderRepaintBoundary;
+ ui.Image image = await boundary.toImage(pixelRatio: ui.window.devicePixelRatio);
+ ByteData? byteData =
+ await (image.toByteData(format: ui.ImageByteFormat.png));
+ if (byteData != null) {
+ final result =
+ await ImageGallerySaver.saveImage(byteData.buffer.asUint8List());
+ print(result);
+ // isSuccess
+ if (result['isSuccess']) {
+ showOKToast('保存成功');
+ } else {
+ showOKToast('保存失败,请检查相册权限是否开启');
+ }
+ }
+ }
+
+ copyInviteText(
+ String username,
+ ) {
+ Clipboard.setData(ClipboardData(
+ text: '【${username}】邀请你加入“微乐园”,邀请码为${widget.code},点击进入${widget.link}'));
+ showOKToast('您已成功复制分享链接,前往对应平台粘贴发送即可~');
+ }
+}
diff --git a/circle_app/lib/app/invite/view.dart b/circle_app/lib/app/invite/view.dart
index 81caff8..00751aa 100644
--- a/circle_app/lib/app/invite/view.dart
+++ b/circle_app/lib/app/invite/view.dart
@@ -1,3 +1,5 @@
+
+import 'package:circle_app/app/invite/share.dart';
import 'package:circle_app/app/swiper/view.dart';
import 'package:circle_app/common/Widgets/rich_text.dart';
import 'package:circle_app/components/my_app_bar.dart';
@@ -14,7 +16,9 @@ class InvitePage extends StatelessWidget {
InvitePage({Key? key}) : super(key: key);
final logic = Get.find();
- final state = Get.find().state;
+ final state = Get
+ .find()
+ .state;
@override
Widget build(BuildContext context) {
@@ -28,348 +32,386 @@ class InvitePage extends StatelessWidget {
child: Scaffold(
backgroundColor: Colors.transparent,
appBar: MyAppBar(
- centerTitle: "邀请有奖",
+ centerTitle: "邀请得会员",
actionWdiget: Container(
alignment: Alignment.center,
height: 22.sp,
width: 62.sp,
- decoration: BoxDecoration(
- color: Color(0xffD739EA),
- borderRadius: BorderRadius.circular(31.sp)),
- child: Text(
- '邀请攻略',
- style: TextStyle(color: Colors.white, fontSize: 11.sp),
+ child: Image.asset(getMineImage('invite_right_icon'),
),
),
),
- body: SingleChildScrollView(
- child: Column(children: [
- Container(
- height: 203.sp,
- margin: EdgeInsets.only(
- left: 20.sp,
- right: 20.sp,
- ),
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(10.sp),
- color: Color(0x1AFFFFFF),
- ),
- child: Column(
- children: [
+ body: GetBuilder(builder: (logic) {
+ List peopleCountList = [];
+ List dayCountList = [];
+ List allSpan = [];
+ if (logic.isLoad == false) {
+ logic.homeData!.inviteAwardConf!.forEach((element) {
+ peopleCountList.add(peopleCountWidget('${element!.inviteCount! ?? '0'}',(element!.inviteCount! ?? 0) <= logic.homeData!.inviteCount!));
+
+ if ((element.rewardDay! ?? 0) > 365) {
+ dayCountList.add(timeWidget('${(element.rewardDay! / 365).toInt()}年'));
+ } else {
+ dayCountList.add(timeWidget('${element.rewardDay!}天'));
+ }
+ // timeWidget(
+ // '+30天',
+ // ),
+
+ });
+ getTextSpanList(
+ 'Tip:您已成功邀请 ${logic.homeData!.inviteCount! ?? 0}位同好,免费获得会员${logic.homeData!.achieveRewardDay! ?? '0'}天, 再邀请${logic.homeData!.diffAwardCount}位同友可领取更多奖励~',
+ Color(0xFFDC5BFD),
+ 12.sp,
+ searchContent: 'Tip:');
+
+ allSpan.addAll(getTextSpanList(
+ 'Tip:您已成功邀请',
+ Color(0xFF0DF5F7),
+ 12.sp,
+ searchContent: 'Tip:'));
+ allSpan.addAll(getTextSpanList(
+ ' ${logic.homeData!.inviteCount! ?? 0} 位同好,',
+ Color(0xFFDC5BFD),
+ 12.sp,
+ searchContent: '${logic.homeData!.inviteCount! ?? 0}'));
+ allSpan.addAll(getTextSpanList(
+ '免费获得会员 ${logic.homeData!.achieveRewardDay! ?? '0'} 天,',
+ Color(0xFFDC5BFD),
+ 12.sp,
+ searchContent: '${logic.homeData!.achieveRewardDay! ?? '0'} '));
+ allSpan.addAll(getTextSpanList(
+ ' 再邀请 ${logic.homeData!.diffAwardCount} 位同友可领取更多奖励~',
+ Color(0xFFDC5BFD),
+ 12.sp,
+ searchContent: '${logic.homeData!.diffAwardCount}'));
+
+ }
+
+
+ return logic.isLoad ? loaddingWidget(true) : SingleChildScrollView(
+ child: Column(children: [
Container(
- padding: EdgeInsets.only(
- left: 14.sp, right: 14.sp, top: 24.sp),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Text(
- '我的专属邀请码',
- style: TextStyle(
- color: Colors.white,
- fontSize: 16.sp,
- fontWeight: FontWeight.w500),
- ),
- GestureDetector(
- behavior: HitTestBehavior.opaque,
- onTap: () {
- showCodePicker(logic);
- },
- child: Container(
- alignment: Alignment.center,
- height: 29.sp,
- width: 76.sp,
- decoration: BoxDecoration(
- border: Border.all(
- color: Color(0xffD739EA), width: 1.sp),
- borderRadius: BorderRadius.circular(14.5.sp)),
- child: Text(
- '填码对接',
- style: TextStyle(
- color: Color(0xffD739EA), fontSize: 12.sp),
- ),
- ),
- )
- ],
+ height: 203.sp,
+ margin: EdgeInsets.only(
+ left: 20.sp,
+ right: 20.sp,
+ top: 10.sp
),
- ),
- Container(
- margin: EdgeInsets.only(top: 40.sp),
- child: Row(
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: AssetImage(getCircleImage("pic_bg")),
+ fit: BoxFit.fill,
+ ),
+ ),
+ child: Column(
children: [
- Expanded(child: Container()),
- Semantics(
- namesRoute: true,
- header: true,
- child: ShaderMask(
- shaderCallback: (Rect bounds) {
- return const LinearGradient(
- begin: Alignment(0.0, -1.0),
- end: Alignment.bottomCenter,
- colors: [
- Color(0xff71F3F2),
- Color(0xffF657FF)
- ],
- ).createShader(Offset.zero & bounds.size);
- },
- child: Text(
- 'F2324424',
+ Container(
+ padding: EdgeInsets.only(
+ left: 14.sp, right: 14.sp, top: 24.sp),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ '我的专属邀请码',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 16.sp,
+ fontWeight: FontWeight.w500),
+ ),
+ GestureDetector(
+ behavior: HitTestBehavior.opaque,
+ onTap: () {
+ showCodePicker(logic);
+ },
+ child: Container(
+ alignment: Alignment.center,
+
+ width: 84.sp,
+
+ child: Image.asset(getMineImage('add_code_icon')),
+ ),
+ )
+ ],
+ ),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: 10.sp),
+ child: Row(
+ children: [
+ SizedBox(width: 20.sp,),
+ Text(
+ logic.homeData!.inviteCode! ?? '',
style: TextStyle(
fontSize: 30.sp,
fontWeight: FontWeight.w600,
- color: Colors.white,
- shadows: [
- Shadow(
- color: Color(0xffF657FF),
- offset: Offset(0.0, -1))
- ]),
+ color: Color(0xffF657FF)
+ ),
),
- )),
- SizedBox(
- width: 4.sp,
+ SizedBox(
+ width: 4.sp,
+ ),
+ GestureDetector(
+ onTap: () {
+ Clipboard.setData(
+ ClipboardData(text: logic.homeData!.inviteCode! ?? ''));
+ showOKToast('复制成功');
+ },
+ child: Text(
+ '复制',
+ style: TextStyle(
+ color: Color(0xff0DF5F7),
+ fontSize: 14.sp),
+ )),
+ Expanded(child: Container())
+ ],
+ ),
),
GestureDetector(
- onTap: () {
- Clipboard.setData(
- ClipboardData(text: '复制到剪切板'));
- showOKToast('复制成功');
- },
+ onTap: () {
+ shopSharePiker(logic.homeData!.inviteCode! ?? '',(logic.homeData!.link! ?? '') +
+ '?code=${logic.homeData!.inviteCode! ?? ''}');
+ },
+ child: Container(
+ width: 174.sp,
+ height: 42.sp,
+ margin: EdgeInsets.only(top: 35.sp),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(21.sp),
+ gradient: const LinearGradient(
+ colors: [
+ Color(0xFF06F9FA),
+ Color(0xFFDC5BFD),
+ ],
+ )),
+ alignment: Alignment.center,
child: Text(
- '复制',
+ '立即邀请',
style: TextStyle(
- color: Color(0xB3FFFFFF), fontSize: 14.sp),
- )),
- Expanded(child: Container())
+ color: Color(0xFF000000),
+ fontSize: 16,
+ fontWeight: FontWeight.w600),
+ ),
+ ),
+ ),
],
),
),
Container(
- width: 224.sp,
- height: 42.sp,
- margin: EdgeInsets.only(top: 15.sp),
+ height: 62.sp,
+ margin: EdgeInsets.only(
+ left: 20.sp, right: 20.sp, top: 15.sp),
decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(21.sp),
- gradient: const LinearGradient(
- colors: [
- Color(0xFF06F9FA),
- Color(0xFFDC5BFD),
- ],
- )),
- alignment: Alignment.center,
- child: Text(
- '立即邀请',
- style: TextStyle(
- color: Colors.white,
- fontSize: 16,
- fontWeight: FontWeight.w600),
+ image: DecorationImage(
+ image: AssetImage(getMineImage("invite_sys_bg")),
+ fit: BoxFit.fill,
+ ),
+ ),
+ child: Swiper(
+ physics: NeverScrollableScrollPhysics(),
+ autoplay: true,
+ // controller: 5,
+ index: 0,
+ itemBuilder: (BuildContext context, int index) {
+ Map data = logic.sysData[index];
+ return Container(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ data['inviter_name'],
+ style: TextStyle(
+ color: Color(0xff0DF5F7),
+ fontSize: 14.sp,
+ fontWeight: FontWeight.w500),
+ ),
+ Container(
+ margin: EdgeInsets.only(
+ left: 5.sp, right: 5.sp),
+ child: Text(
+ '邀请',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 14.sp,
+ fontWeight: FontWeight.w500),
+ )),
+ Text(
+ data['invitee_name'],
+ style: TextStyle(
+ color: Color(0xff0DF5F7),
+ fontSize: 14.sp,
+ fontWeight: FontWeight.w500),
+ ),
+ Container(
+ margin: EdgeInsets.only(left: 5.sp),
+ child: Text(
+ '加入微乐园',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 14.sp,
+ fontWeight: FontWeight.w500),
+ )),
+ ],
+ ),
+ );
+ },
+ itemCount: logic.sysData.length,
),
),
- ],
- ),
- ),
- Container(
- height: 40.sp,
- margin: EdgeInsets.only(left: 20.sp, right: 20.sp, top: 30.sp),
- decoration: BoxDecoration(
- color: Color(0x1AFFFFFF),
- borderRadius: BorderRadius.circular(10.sp)),
- child: Swiper(
- physics: NeverScrollableScrollPhysics(),
- autoplay: true,
- // controller: 5,
- index: 0,
- itemBuilder: (BuildContext context, int index) {
- return Container(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Text(
- '哟刚说A',
- style: TextStyle(
- color: Color(0xFFDC5BFD),
- fontSize: 14.sp,
- fontWeight: FontWeight.w500),
+ Container(
+ height: 220.sp,
+ width: Get.width-30.sp,
+ margin:
+ EdgeInsets.only(top: 15.sp),
+ padding: EdgeInsets.only(top: 10.sp,bottom: 10.sp,left: 10.sp,right: 10.sp),
+ decoration: BoxDecoration(
+ image:DecorationImage(
+ image: AssetImage(getMineImage("invite_count_bg")),
+ fit: BoxFit.fill,
),
- Container(
- margin: EdgeInsets.only(left: 5.sp, right: 5.sp),
- child: Text(
- '邀请',
- style: TextStyle(
- color: Colors.white,
- fontSize: 14.sp,
- fontWeight: FontWeight.w500),
- )),
- Text(
- '扥扥',
- style: TextStyle(
- color: Color(0xFFDC5BFD),
- fontSize: 14.sp,
- fontWeight: FontWeight.w500),
- ),
- Container(
- margin: EdgeInsets.only(left: 5.sp),
- child: Text(
- '加入微乐园',
- style: TextStyle(
- color: Colors.white,
- fontSize: 14.sp,
- fontWeight: FontWeight.w500),
- )),
- ],
+ ),
+ child: Column(
+ children: [
+ Container(
+ margin: EdgeInsets.only(top: 15.sp),
+ alignment: Alignment.center,
+ child: Image.asset(getMineImage('invite_title'),width: 256.sp,),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: 10.sp),
+ alignment: Alignment.center,
+ child: Image.asset(getMineImage('invite_line'),width: 328.sp,),
+ ),
+ Container(
+ height: 70.sp,
+ margin: EdgeInsets.only(
+ left: 15.sp, right: 15.sp),
+ child: Row(
+ children: [
+ Text(
+ '邀请人数',
+ style: TextStyle(
+ color: Color(0xFF0DF5F7),
+ fontSize: 14.sp,
+ fontWeight: FontWeight.w500),
+ ),
+ Expanded(
+ child: Stack(
+ // fit: StackFit.expand,
+ alignment: Alignment.center,
+ children: [
+ Container(
+ margin: EdgeInsets.only(
+ left: 61.sp, right: 46.sp),
+ height: 2.sp,
+ color: Color(0xFF0DF5F7),
+ ),
+ Container(
+ margin: EdgeInsets.only(
+ left: 15.sp),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ children:peopleCountList,
+ ),
+ )
+ ],
+ ))
+ ],
+ )),
+ Container(
+ height: 20.sp,
+ margin: EdgeInsets.only(
+ left: 15.sp, right: 15.sp),
+ child: Row(
+ children: [
+ Text(
+ '会员时长',
+ style: TextStyle(
+ color: Color(0xFF0DF5F7),
+ fontSize: 14.sp,
+ fontWeight: FontWeight.w500),
+ ),
+ Expanded(
+ child: Stack(
+ // fit: StackFit.expand,
+ alignment: Alignment.center,
+ children: [
+ Container(
+ margin: EdgeInsets.only(
+ left: 25.sp, right: 15.sp),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ children: dayCountList
+ ),
+ )
+ ],
+ )),
+ ],
+ )),
+ Expanded(child: Container()),
+ Container(
+ margin: EdgeInsets.only(
+ left: 15.sp, right: 15.sp,bottom: 20.sp),
+ child: RichText(
+ text: TextSpan(
+ children: allSpan
+ )))
+ ],
+ )),
+ SafeArea(
+ child: Container(
+ margin: EdgeInsets.only(top: 15.sp),
+ alignment: Alignment.center,
+ child: Image.asset(getMineImage('invite_vip_desc'),width: Get.width-30.sp,),
),
- );
- },
- itemCount: 5,
- ),
- ),
- Container(
- height: 203.sp,
- margin:
- EdgeInsets.only(left: 20.sp, right: 20.sp, top: 20.sp),
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(10.sp),
- color: Color(0x1AFFFFFF),
- ),
- child: Column(
- children: [
- Container(
- height: 80.sp,
- margin: EdgeInsets.only(left: 15.sp, right: 15.sp),
- child: Row(
- children: [
- Text(
- '邀请人数',
- style: TextStyle(
- color: Color(0xFFDC5BFD),
- fontSize: 14.sp,
- fontWeight: FontWeight.w500),
- ),
- Expanded(
- child: Stack(
- // fit: StackFit.expand,
- alignment: Alignment.center,
- children: [
- Container(
- margin: EdgeInsets.only(
- left: 61.sp, right: 46.sp),
- height: 2.sp,
- color: Color(0xFFDC5BFD).withOpacity(0.4),
- ),
- Container(
- margin: EdgeInsets.only(left: 15.sp),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment.spaceBetween,
- children: [
- peopleCountWidget('20', true),
- peopleCountWidget('50', true),
- peopleCountWidget('100', true),
- peopleCountWidget('500', true),
- ],
- ),
- )
- ],
- ))
- ],
- )),
- Container(
- height: 80.sp,
- margin: EdgeInsets.only(left: 15.sp, right: 15.sp),
- child: Row(
- children: [
- Text(
- '会员时长',
- style: TextStyle(
- color: Color(0xFFDC5BFD),
- fontSize: 14.sp,
- fontWeight: FontWeight.w500),
- ),
- Expanded(
- child: Stack(
- // fit: StackFit.expand,
- alignment: Alignment.center,
- children: [
- Container(
- margin: EdgeInsets.only(
- left: 20.sp, right: 10.sp),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment.spaceBetween,
- children: [
- timeWidget(
- '+30天',
- ),
- timeWidget(
- '+100天',
- ),
- timeWidget(
- '+365天',
- ),
- timeWidget(
- '+3年',
- ),
- ],
- ),
- )
- ],
- )),
- ],
- )),
- Container(
- margin: EdgeInsets.only(left: 15.sp, right: 15.sp),
- child: RichText(
- text: TextSpan(
- children: getTextSpanList(
- 'Tip:您已成功邀请 19位同好,免费获得会员120天, 再邀请1位同友可领取更多奖励~',
- Color(0xFFDC5BFD),
- 14.sp,
- searchContent: 'Tip:'),
- )))
- ],
- )),
- // Container(
- // height: 203.sp,
- // margin:
- // EdgeInsets.only(left: 20.sp, right: 20.sp, top: 20.sp),
- // decoration: BoxDecoration(
- // borderRadius: BorderRadius.circular(10.sp),
- // color: Color(0x1AFFFFFF),
- // ),
- // child: Column(children: [
- // Expanded(
- // child: ListView.builder(
- // itemBuilder: (BuildContext context, int index) {
- // return Container(
- // margin: EdgeInsets.only(top: 10.sp),
- // padding: EdgeInsets.only(left: 15.sp, right: 15.sp),
- // child: Row(
- // children: [
- // ClipOval(
- // child: Image.network(
- // 'https://p26-passport.byteacctimg.com/img/user-avatar/b0541a2a377dd239a22eea2934709967~100x100.awebp',
- // width: 40.sp,
- // height: 40.sp,
- // ),
- // ),
- // SizedBox(
- // width: 4.sp,
- // ),
- // Column(
- // children: [
- // Text(
- // '2222',
- // style: TextStyle(
- // color: Colors.white, fontSize: 14.sp),
- // ),
- // ],
- // )
- // ],
- // ),
- // );
- // },
- // itemCount: 5,
- // ))
- // ])),
- ]))));
+ ),
+ // Container(
+ // height: 203.sp,
+ // margin:
+ // EdgeInsets.only(left: 20.sp, right: 20.sp, top: 20.sp),
+ // decoration: BoxDecoration(
+ // borderRadius: BorderRadius.circular(10.sp),
+ // color: Color(0x1AFFFFFF),
+ // ),
+ // child: Column(children: [
+ // Expanded(
+ // child: ListView.builder(
+ // itemBuilder: (BuildContext context, int index) {
+ // return Container(
+ // margin: EdgeInsets.only(top: 10.sp),
+ // padding: EdgeInsets.only(left: 15.sp, right: 15.sp),
+ // child: Row(
+ // children: [
+ // ClipOval(
+ // child: Image.network(
+ // 'https://p26-passport.byteacctimg.com/img/user-avatar/b0541a2a377dd239a22eea2934709967~100x100.awebp',
+ // width: 40.sp,
+ // height: 40.sp,
+ // ),
+ // ),
+ // SizedBox(
+ // width: 4.sp,
+ // ),
+ // Column(
+ // children: [
+ // Text(
+ // '2222',
+ // style: TextStyle(
+ // color: Colors.white, fontSize: 14.sp),
+ // ),
+ // ],
+ // )
+ // ],
+ // ),
+ // );
+ // },
+ // itemCount: 5,
+ // ))
+ // ])),
+ ]));
+ })));
}
peopleCountWidget(String count, bool isCheck) {
@@ -378,10 +420,10 @@ class InvitePage extends StatelessWidget {
height: 46.sp,
alignment: Alignment.center,
decoration:
- BoxDecoration(color: Color(0xFFDC5BFD), shape: BoxShape.circle),
+ BoxDecoration(color: isCheck ? Color(0xFF0DF5F7) : Color(0xFF504261), shape: BoxShape.circle),
child: Text(
'$count人',
- style: TextStyle(color: Colors.white, fontSize: 12.sp),
+ style: TextStyle(color:isCheck ? Color(0xFF000000) : Colors.white, fontSize: 12.sp),
),
);
}
@@ -392,6 +434,13 @@ class InvitePage extends StatelessWidget {
style: TextStyle(color: Colors.white, fontSize: 12.sp),
);
}
+
+ void shopSharePiker(String code,String link) {
+ Get.bottomSheet(
+ Share(code,link), isScrollControlled: true,
+ enableDrag: false
+ );
+ }
}
void showCodePicker(InviteLogic logic) {
@@ -420,7 +469,7 @@ void showCodePicker(InviteLogic logic) {
),
),
Container(
- margin: EdgeInsets.only(left: 20, right: 20.sp,top: 30.sp),
+ margin: EdgeInsets.only(left: 20, right: 20.sp, top: 30.sp),
decoration: BoxDecoration(
color: Color(0x1AFFFFFF),
borderRadius: BorderRadius.circular(6.sp)),
@@ -434,7 +483,7 @@ void showCodePicker(InviteLogic logic) {
decoration: InputDecoration(
hintText: '请输入邀请码',
hintStyle:
- TextStyle(color: Colors.white70, fontSize: 16.sp),
+ TextStyle(color: Colors.white70, fontSize: 16.sp),
border: InputBorder.none,
counterText: '',
contentPadding: EdgeInsets.only(left: 16.sp)),
@@ -450,7 +499,8 @@ void showCodePicker(InviteLogic logic) {
),
Expanded(child: Container()),
Container(
- margin: EdgeInsets.only(left: 40.sp,right: 40.sp,bottom: 20.sp),
+ margin: EdgeInsets.only(
+ left: 40.sp, right: 40.sp, bottom: 20.sp),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@@ -467,12 +517,20 @@ void showCodePicker(InviteLogic logic) {
color: Color(0x1AFFFFFF)),
child: const Text(
'放弃对接',
- style: TextStyle(color: Colors.white, fontSize: 16),
+ style: TextStyle(
+ color: Colors.white, fontSize: 16),
),
),
),
GestureDetector(
- onTap: () {},
+ onTap: () {
+ if (logic.codeEditingController.text.isEmpty) {
+ showOKToast('请输入邀请码');
+ return;
+ }
+ Get.back();
+ logic.addCode(logic.codeEditingController.text);
+ },
child: Container(
alignment: Alignment.center,
width: 114.sp,
@@ -488,7 +546,7 @@ void showCodePicker(InviteLogic logic) {
child: const Text(
'确认对接',
style: TextStyle(
- color: Colors.white, fontSize: 16),
+ color: Colors.black, fontSize: 16),
),
),
)
diff --git a/circle_app/lib/app/minefragment/view.dart b/circle_app/lib/app/minefragment/view.dart
index 53ce097..eacc498 100644
--- a/circle_app/lib/app/minefragment/view.dart
+++ b/circle_app/lib/app/minefragment/view.dart
@@ -40,7 +40,7 @@ class MinefragmentPage extends StatelessWidget {
fit: BoxFit.cover,
),
),
- child: Padding(
+ child: Padding(
padding: EdgeInsets.only(
top: 20.0 + statusBarHeight.sp,
left: 11.sp,
@@ -80,7 +80,7 @@ class MinefragmentPage extends StatelessWidget {
Widget _circleLiveView(MinefragmentLogic logic) {
return Column(
- children: [_circleItemView(logic), _helpItemView(), _invienItemView(), _setUpItemView()],
+ children: [_circleItemView(logic), _invienItemView(), _helpItemView(),_setUpItemView()],
);
}
@@ -188,7 +188,7 @@ class MinefragmentPage extends StatelessWidget {
Row(
children: [
Image(
- image: AssetImage(getHomeImage("mine_help")),
+ image: AssetImage(getMineImage("invite_icon")),
width: 24.sp,
height: 24.sp,
),
@@ -203,7 +203,7 @@ class MinefragmentPage extends StatelessWidget {
Row(
children: [
const Text(
- "免费领领会员",
+ "免费领取会员",
style: TextStyle(color: Colors.white60),
),
Image(
diff --git a/circle_app/lib/network/api.dart b/circle_app/lib/network/api.dart
index 7075463..8087eb6 100644
--- a/circle_app/lib/network/api.dart
+++ b/circle_app/lib/network/api.dart
@@ -246,4 +246,15 @@ class Api {
//苹果支付
static const applePayCallBack = 'mall-service/payment/apple/notify';
+ //邀请好友主页
+ static const inviteMainPage = 'user-service/invite/mainPage';
+
+ //系统随机的邀请记录
+ static const inviteSysRecord = 'user-service/invite/record/rand';
+
+ //填写邀请码
+ static const inviteFillIn = 'user-service/invite/fillin';
+
+
+
}
\ No newline at end of file
diff --git a/circle_app/pubspec.yaml b/circle_app/pubspec.yaml
index 590cd9a..0e3414a 100644
--- a/circle_app/pubspec.yaml
+++ b/circle_app/pubspec.yaml
@@ -100,8 +100,12 @@ dependencies:
tencent_chat_push_for_china: ^2.6.2+1
#苹果内购
in_app_purchase: ^3.0.8
+ #图片保存到相册
+ image_gallery_saver: ^1.7.1
+ #二维码生成
+ qr_flutter: ^4.0.0
#第三方分享平台
- sharesdk_plugin: ^1.3.6
+# sharesdk_plugin: 1.3.6
dev_dependencies:
flutter_test: