From 1e23235fbac47fc068a58077d5f42e3eeb8a63f5 Mon Sep 17 00:00:00 2001 From: w-R <953969641@qq.com> Date: Wed, 9 Mar 2022 19:30:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=94=80=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 4 +- .../zsw/huixiang/wxapi/WXPayEntryActivity.kt | 2 +- assets/image/2x/logout.png | Bin 0 -> 6396 bytes assets/image/2x/logout_s.png | Bin 0 -> 4545 bytes assets/image/3x/logout.png | Bin 0 -> 11782 bytes assets/image/3x/logout_s.png | Bin 0 -> 8334 bytes assets/image/logout.png | Bin 0 -> 3021 bytes assets/image/logout_s.png | Bin 0 -> 2176 bytes lib/community/community_page.dart | 1 - .../community_view/class_details.dart | 84 ++-- lib/community/order_page.dart | 76 +++ lib/home/home_page.dart | 2 +- lib/login/login_page.dart | 1 - lib/main.dart | 6 + lib/main_page.dart | 5 +- lib/retrofit/retrofit_api.dart | 4 + lib/retrofit/retrofit_api.g.dart | 21 + lib/setting/logout_ing.dart | 459 ++++++++++++++++++ lib/setting/logout_page.dart | 293 +++++++++++ lib/setting/setting_page.dart | 6 + pubspec.lock | 4 +- 21 files changed, 918 insertions(+), 50 deletions(-) create mode 100644 assets/image/2x/logout.png create mode 100644 assets/image/2x/logout_s.png create mode 100644 assets/image/3x/logout.png create mode 100644 assets/image/3x/logout_s.png create mode 100644 assets/image/logout.png create mode 100644 assets/image/logout_s.png create mode 100644 lib/community/order_page.dart create mode 100644 lib/setting/logout_ing.dart create mode 100644 lib/setting/logout_page.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index 28c20a56..7ac3760d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -90,7 +90,7 @@ def mfph = [ ] android { - compileSdkVersion 30 + compileSdkVersion 31 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -106,7 +106,7 @@ android { defaultConfig { applicationId "com.zsw.huixiang" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/android/app/src/main/kotlin/com/zsw/huixiang/wxapi/WXPayEntryActivity.kt b/android/app/src/main/kotlin/com/zsw/huixiang/wxapi/WXPayEntryActivity.kt index 3a0174fc..babb53f4 100644 --- a/android/app/src/main/kotlin/com/zsw/huixiang/wxapi/WXPayEntryActivity.kt +++ b/android/app/src/main/kotlin/com/zsw/huixiang/wxapi/WXPayEntryActivity.kt @@ -22,7 +22,7 @@ class WXPayEntryActivity : AbsWXPayCallbackActivity() { val wechatAppId = appInfo.metaData.getString("weChatAppId") if (wechatAppId != null ){ WXAPiHandler.setupWxApi(wechatAppId, this) - WXAPiHandler.setCoolBool(true) +// WXAPiHandler.setCoolBool(true) io.flutter.Log.d("fluwx", "weChatAppId:$wechatAppId") }else { io.flutter.Log.e("fluwx", "can't load meta-data weChatAppId") diff --git a/assets/image/2x/logout.png b/assets/image/2x/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d1381997c08c1bed63a7d76624bb1842883940 GIT binary patch literal 6396 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%0ATIG#=r9Dzk^eheY|5Ju}(2p5gpd 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 P00000NkvXXu0mjfuiD8x literal 0 HcmV?d00001 diff --git a/assets/image/logout_s.png b/assets/image/logout_s.png new file mode 100644 index 0000000000000000000000000000000000000000..18170ae4199aae7fd2d04d4076695f4429ce3b47 GIT binary patch literal 2176 zcmV-`2!Hp9P)Px-I!Q!9RCr$Pn|p9o#TmeV-%UbD?!gB>Dz6TsA~M#&XY16Cwq;t!`WWA_Ff|GT z0ks9J3Ys=NECi{d2nH352m?NfwWHCg<6yPZ&b0M4DpV9owFRsXteSIf5|Z5QoO5qN z&gJIbv*(-*ok{ku%;bCR?|!>y_uE}zp!G^X2H5mYU;s{m>==L(6^^Q;Mp8W3--ck( z%uz{}Aj~1nnUdnQ{sgEXoNh2Kku>*9iW>*u06s7oB73nJA<))e0Oie`JYc$bTq!o2 z`YoISU_j9%4j1)HI4Vg!!rWdvujl|qiNk;T10dh9QiC{=GNvM2100zbfZ}FxxI1n* z3JzrmCzECjijfFI5h^@CidGb#1G^|;JI%Z!@I~A)^8$(nN%5Snab-~jtoCdj%%*UF8gba58^!?>vP#m3aGhsJ(N3C) z(xSI2R!MF~xDx_@eRSj2l~*Wg#i3qD@jy71_vwB)0+_`Jx9J4YXR?aB#Nn2p{tkrW zu4yc`(MfH{jQMp?=LbbDO|7I@9K?5T8_%za!^c4kbjc`-tHB%BK^Jm5=Hrxghgh{Z ztS@G?=pwL~f$UdlEM>fU&?ny@!Di-C2jN>{v$c>)WH{M%%&Q3FgT_`+uA~&cXwNTl zSQ&K2woBNG&FO{eQ_s$e7ub{N@2zPAg8kMM`OXE%%;87mjhn7h#J9SJ=Ie0I8CqtvgwtFsDW2`A z6An%#D@kyJmUA897ykrjo$c57%b(!~-_fz6EBlbx)I^74dG(PKb-f3cZ`us!e%~+t z%1dzJguo_32<{Xc-$bXKIqDFGlIF9VqI-x~3aD&)4$k|LU*Lu3;ff35_2akZ?zx8b z+*9hqvG^|V2a{2<;VHP-J^bj=p7||Iy4ME{2_7;U<-;4`s)>FV zPi}-MlZ?6rZV;P>C~y{#pw4KN4UO=VOfj;%t#5?urx`z#~3~rq52eI-Vxa}sha1`ss@lIg876#742$PLQ zIe#(yJf{qOcRkGS&UiEKBf~Mh0Cc-Ow+?C-_yH`M2TK;3fwJG~YO(iM8T2#9!i~^9 zy)@Tm&w+(Y{PyeS!aeS3kHMx`BF_Gk6MZ<9Oe10VX6cNXu=HL(gx=ITr4^ezVaiC)dF82mCH(PKQRrw|y1oi?e@2t)DqVI1=SuBGA?i40KX8Jh0X; zUUMyMd^E6$P=aZOOUgSA5BIflwUovCz?e`01W~%Y3f4aEm%R3Bcw>Q09qGb0*^iI7yR+1(Db_i${|G*jpF#%Z{grnasdgNLWWUX?X)vt z-mm;}3w{A_xaWq3nsAvkf0wx|;c__PHE4f31Zw-1i0fV6u*JGQo1Y-)S6 z799=@#^McNTx=ol`3i>QTpDO@hT(_A<^tG`%_#yYV{o!_k9*z!uibAIqIO~Fa+r~G z2Yl6iaBEB-$IM%bZ%c|d3xygvbGnSHN+y$FO)PsZcStR~6DDShavRq{-5hX-Ry=LG z*u^UgvB5Di|HK2rZzZRQ-Y1#Uok12Wz;FRRJhTVJ4!$RhHFJ6Za%-G!wa|$DP;4|Z zrpvyu;8i745LU!CNrxiht$^K^G_%Aer+QZ0pfNbvuh@75w+J(~cqm3Bc95n@Qr=QS zyBUS!0fGuF@14~xMy|-^>$38m5iP^vjza60Vzi9I>7Iu&&x_oZ^i>Es_h^fS8Swv^ zmp+?FFkhP47Er5Ku|9*-1Jd!7;T~tYo4rG$b|9<&74R7CER!~`gd0oib2#0QGQ;hB zl=n`30z$Sv5wKs%d&`-50BiGnl;P8x$AbnZHy~BP2=9r2c!hiSPVG=!fSKl2==Qpm z9TeM9ye%ylEb?TW{@=g}m@j=QHUOsp?g2Oj;QSAd%qwNt(&cpk0000 with WidgetsBindingObserver { physics: BouncingScrollPhysics(), child: Column( children: [ - Stack( - children: [ - ClassDetailsVideo(key:videoKey,exitFull: (){setState(() {});}, - coverImg: chapterList.length > chapterIndex - ? chapterList[chapterIndex].content.coverImg - : "",isShowImg: this.isShowImg, - changeShowImg: (isShowImg){setState(() { - this.isShowImg = isShowImg; - });},heightFun: (height) { - this.height = height + - MediaQuery - .of(context) - .padding - .top + - kToolbarHeight + - 24; - if (mounted) setState(() {}); - },), - Container( - margin: EdgeInsets.only( - top: 40.h, left: 16.w, right: 16.w), - decoration: BoxDecoration( - color: Colors.transparent, - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - GestureDetector( - child: Image.asset( - "assets/image/integral_return.png", - width: 24, - height: 24, + Container( + child:Stack( + children: [ + ClassDetailsVideo(key:videoKey,exitFull: (){setState(() {});}, + coverImg: chapterList.length > chapterIndex + ? chapterList[chapterIndex].content.coverImg + : "",isShowImg: this.isShowImg, + changeShowImg: (isShowImg){setState(() { + this.isShowImg = isShowImg; + });},heightFun: (height) { + this.height = height + + MediaQuery + .of(context) + .padding + .top + + kToolbarHeight + + 24; + if (mounted) setState(() {}); + },), + Container( + margin: EdgeInsets.only( + top: 40.h, left: 16.w, right: 16.w), + decoration: BoxDecoration( + color: Colors.transparent, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + child: Image.asset( + "assets/image/integral_return.png", + width: 24, + height: 24, + ), + onTap: () { + Navigator.of(context).pop( + course != null ? course.viewers + 1 : 0); + }, ), - onTap: () { - Navigator.of(context).pop( - course != null ? course.viewers + 1 : 0); - }, - ), - ], + ], + ), ), - ), - ], + ], + ), ), Container( margin: EdgeInsets.only(bottom: 16.h), diff --git a/lib/community/order_page.dart b/lib/community/order_page.dart new file mode 100644 index 00000000..862426ea --- /dev/null +++ b/lib/community/order_page.dart @@ -0,0 +1,76 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/order/order_history_page.dart'; +import 'package:huixiang/view_widget/login_tips_dialog.dart'; +import 'package:huixiang/view_widget/my_appbar.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/view_widget/my_tab.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class OrderPage extends StatefulWidget { + @override + State createState() { + return _OrderPage(); + } +} + +class _OrderPage extends State + with SingleTickerProviderStateMixin { + TabController tabcontroller; + + List lables = [ + "全部", + "待付款", + "未完成", + "已完成", + ]; + + @override + void initState() { + super.initState(); + + if (tabcontroller == null) + tabcontroller = TabController(length: lables.length, vsync: this, initialIndex: 1); + } + + @override + Widget build(BuildContext context) { + return DefaultTabController( + length: 4, + child: Scaffold( + appBar: MyAppBar( + title: "", + leading: false, + bottom: TabBar( + // isScrollable: true, //可滚动 + indicatorColor: Color(0xff39B54A), + labelColor: Colors.black, + labelStyle: TextStyle( + fontSize: 17.sp, + fontWeight: FontWeight.bold, + ), + unselectedLabelStyle: TextStyle( + fontSize: 16.sp, + fontWeight: FontWeight.normal, + ), + // controller: tabController, + //未选中文字颜色 + unselectedLabelColor: Color(0xffA29E9E), + indicatorSize: TabBarIndicatorSize.label, + //指示器与文字等宽 + tabs: [ + MyTab(text: S.of(context).quanbu), + MyTab(text: S.of(context).daifukuan), + MyTab(text: S.of(context).weiwancheng), + MyTab(text: S.of(context).yiwancheng), + ], + ), + ), + body: TabBarView( + children: [OrderHistoryList(0),OrderHistoryList(1),OrderHistoryList(2),OrderHistoryList(3), ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart index 5b4d213e..5c137aa4 100644 --- a/lib/home/home_page.dart +++ b/lib/home/home_page.dart @@ -85,7 +85,7 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin { } - ///邀请成功弹窗 + ///邀请成功 inviteShowAlertDialog(invite, InterviewCouponList interviewCouponList) { //显示对话框 showDialog( diff --git a/lib/login/login_page.dart b/lib/login/login_page.dart index 385bafd9..d52b2f60 100644 --- a/lib/login/login_page.dart +++ b/lib/login/login_page.dart @@ -19,7 +19,6 @@ import 'package:flutter/services.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:dio/dio.dart'; -import 'package:huixiang/view_widget/invite_success_dialog.dart'; import 'package:huixiang/view_widget/round_button.dart'; import 'package:photo_view/photo_view.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/lib/main.dart b/lib/main.dart index c51e7055..ae8ae5d5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -48,6 +48,8 @@ import 'package:huixiang/qr/qr_code_scan.dart'; import 'package:huixiang/qr/qr_share.dart'; import 'package:huixiang/setting/about_page.dart'; import 'package:huixiang/setting/help_feedback_page.dart'; +import 'package:huixiang/setting/logout_ing.dart'; +import 'package:huixiang/setting/logout_page.dart'; import 'package:huixiang/setting/permission_setting_page.dart'; import 'package:huixiang/setting/setting_page.dart'; import 'package:huixiang/setting/treaty_page.dart'; @@ -361,4 +363,8 @@ Map routers = { ReportNotice(), '/router/report_success': (context, {arguments}) => ReportSuccess(), + '/router/logout_page': (context, {arguments}) => + LogoutPage(), + '/router/logout_ing': (context, {arguments}) => + LogoutIng(), }; diff --git a/lib/main_page.dart b/lib/main_page.dart index 8a117688..1098eaba 100644 --- a/lib/main_page.dart +++ b/lib/main_page.dart @@ -22,6 +22,8 @@ import 'package:permission_handler/permission_handler.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart'; +import 'community/order_page.dart'; + class MainPage extends StatefulWidget { final Map arguments; @@ -103,6 +105,7 @@ class _MainPage extends State with WidgetsBindingObserver { },invite:invite,interviewCouponList:interviewCouponList,firstLoginCouponList:firstLoginCouponList,), // MainHomePage(), UnionPage(), + // (Theme.of(context).platform == TargetPlatform.android) ? OrderPage() :CommunityPage(), CommunityPage(), MinePage(), ]; @@ -303,7 +306,7 @@ class _MainPage extends State with WidgetsBindingObserver { // bottomNavigationBigItem(S.of(context).pinpai, 0), bottomNavigationItem(S.of(context).main_menu1, 0), bottomNavigationItem(S.of(context).main_menu2, 1), - bottomNavigationItem(S.of(context).main_menu3, 2), + bottomNavigationItem((Theme.of(context).platform == TargetPlatform.android) ? "订单" :S.of(context).main_menu3 , 2), bottomNavigationItem(S.of(context).main_menu4, 3), ], ), diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index bf919926..33bc1d91 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -508,4 +508,8 @@ abstract class ApiService { @GET("/home/appPopup") Future> appPopup(); + ///注销会员 + @GET("/member/deleteMine") + Future deleteMine(); + } diff --git a/lib/retrofit/retrofit_api.g.dart b/lib/retrofit/retrofit_api.g.dart index 7b2bc2e6..a49324a3 100644 --- a/lib/retrofit/retrofit_api.g.dart +++ b/lib/retrofit/retrofit_api.g.dart @@ -1894,4 +1894,25 @@ class _ApiService implements ApiService { ); return value; } + + @override + Future> deleteMine() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/member/deleteMine', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson( + _result.data, + (json) => json as dynamic, + ); + return value; + } + } diff --git a/lib/setting/logout_ing.dart b/lib/setting/logout_ing.dart new file mode 100644 index 00000000..76ca6dd2 --- /dev/null +++ b/lib/setting/logout_ing.dart @@ -0,0 +1,459 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:dio/dio.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/base_data.dart'; +import 'package:huixiang/retrofit/data/user_info.dart'; +import 'package:huixiang/retrofit/min_api.dart'; +import 'package:huixiang/retrofit/retrofit_api.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:huixiang/view_widget/border_text.dart'; +import 'package:huixiang/view_widget/my_appbar.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import '../main.dart'; + +class LogoutIng extends StatefulWidget { + @override + State createState() { + return _LogoutIng(); + } +} + +class _LogoutIng extends State { + final TextEditingController phoneController = TextEditingController(); + final TextEditingController provingController = TextEditingController(); + String money; + String balance; + String phone = ""; + MinApiService minService; + ApiService apiService; + var btnText = S.current.send_code; + var _sendCodeStatus = 0; + Timer _timer; + UserInfo userInfo; + + @override + void initState() { + super.initState(); + queryUserBalance(); + } + + queryUserBalance() async { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + showLoading: false, + ); + BaseData baseData = + await apiService.queryInfo().catchError((onError) {}); + if (baseData != null && baseData.isSuccess) { + userInfo = baseData.data; + balance = userInfo?.balance ?? "0.00"; + money = userInfo?.money ??"0.00"; + phone = userInfo?.phone ?? ""; + if (mounted) setState(() {}); + } + } + + proving(mobile) async { + if(phoneController.text != phone){ + SmartDialog.showToast("手机号码不正确", + alignment: Alignment.center); + return ; + } + if (_sendCodeStatus != 0) + return; + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + showLoading: true + ); + } + BaseData baseData = await apiService.sendVerify(mobile).catchError((onError) {}); + if (baseData != null && baseData.isSuccess) { + countdown(); + SmartDialog.showToast(baseData.data, + alignment: Alignment.center); + }else{ + SmartDialog.showToast(baseData.msg, + alignment: Alignment.center); + } + } + + ///注销账户 + logout() async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + showLoading: true + ); + } + BaseData baseData = await apiService.deleteMine().catchError((onError) {}); + if (baseData != null && baseData.isSuccess) { + logOut(); + SmartDialog.showToast(baseData.data, + alignment: Alignment.center); + }else{ + SmartDialog.showToast(baseData.msg, + alignment: Alignment.center); + Navigator.of(context).pop(); + } + } + + countdown() { + if (_timer != null && _timer.isActive) return; + int countdown = 60; + _timer = Timer.periodic(Duration(seconds: 1), (timer) { + countdown--; + if (countdown == 0) { + setState(() { + btnText = S.of(context).send_code; + }); + _sendCodeStatus = 0; + _timer.cancel(); + } else { + setState(() { + btnText = S.of(context).resend_in_seconds(countdown); + }); + } + }); + } + + @override + void dispose() { + if (_timer != null && _timer.isActive) _timer.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: MyAppBar( + title: "", + titleColor: Colors.black, + titleSize: 18.sp, + background: Colors.transparent, + leadingColor: Colors.black, + ), + body: Stack( + children: [ + Container( + width: double.infinity, + height: double.infinity, + margin: EdgeInsets.only(left: 16, right: 17), + child: SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only( + top: 16, + bottom: 4, + ), + child: Text( + "进行帐号注销", + style: TextStyle( + fontSize: 21.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF181818), + ), + ), + ), + Text( + "再次提醒:注销帐号后不可恢复,相关数据和信息会永久删除。", + style: TextStyle( + fontSize: 14.sp, + height: 1.5, + fontWeight: MyFontWeight.regular, + color: Color(0xFF727272), + ), + ), + Padding( + padding: EdgeInsets.only( + top: 24, + bottom: 16, + ), + child: Text( + S.of(context).shoujihao, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF181818), + ), + ), + ), + Container( + margin: EdgeInsets.fromLTRB(0.w, 0, 20.w, 0), + alignment: Alignment.topLeft, + child: TextField( + controller: phoneController, + inputFormatters: [LengthLimitingTextInputFormatter(11)], + decoration: InputDecoration( + border: InputBorder.none, + hintText: S.of(context).qingshurushoujihao, + hintStyle: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xffA29E9E), + ), + ), + ), + ), + Container( + height: 1.h, + width: MediaQuery.of(context).size.width, + color: Color(0xFFF4F4F4), + ), + Padding( + padding: EdgeInsets.only( + top: 15, + bottom: 16, + ), + child: Text( + "验证码", + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF181818), + ), + ), + ), + Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.fromLTRB(0.w, 0, 20.w, 0), + alignment: Alignment.topLeft, + child: TextField( + controller: provingController, + inputFormatters: [ + LengthLimitingTextInputFormatter(6) + ], + textInputAction: TextInputAction.next, + decoration: InputDecoration( + border: InputBorder.none, + hintText: S.of(context).qingshuruyanzhengma, + hintStyle: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xffA29E9E), + ), + ), + ), + )), + GestureDetector( + onTap: (){ + if(phoneController.text == ""){ + SmartDialog.showToast("请输入手机号码", + alignment: Alignment.center); + return; + } + proving(phoneController.text); + }, + child: + Text( + btnText, + style: TextStyle( + fontSize: 14.sp, + height: 1.5, + fontWeight: MyFontWeight.medium, + color:Color(0xFF32A060), + ), + ), + ) + + ], + ), + Container( + height: 1.h, + width: MediaQuery.of(context).size.width / 1.6, + color: Color(0xFFF4F4F4), + ), + ], + ), + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: GestureDetector( + onTap: () { + if(phoneController.text == ""){ + SmartDialog.showToast("请输入手机号码", + alignment: Alignment.center); + }else if(provingController.text == ""){ + SmartDialog.showToast("请输入验证码", + alignment: Alignment.center); + } + if(phoneController.text != "" && provingController.text != ""){ + showDeleteDialog(); + } + }, + + child: Container( + width: double.infinity, + height: 54.h, + alignment: Alignment.center, + color: (phoneController.text == "" && + provingController.text == "") + ? Color(0xFFD8D8D8) + : Color(0xFF32A060), + child: Text( + "确认注销", + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFFFFFFFF), + ), + )), + )) + ], + ), + ); + } + + ///确认注销账户弹窗 + showDeleteDialog() { + showDialog( + context: context, + builder: (context) { + return AlertDialog( + content:Container( + width: double.infinity, + height: 350.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + onTap: (){ + Navigator.of(context).pop(); + }, + child: Container( + alignment: Alignment.topRight, + child:Image.asset( + "assets/image/yq_qx.png", + width: 20, + height: 20, + color: Color(0xFF353535), + ), + ),), + (balance == "0.00" && money == "0.00")? + Image.asset( + "assets/image/logout.png", + width: 80, + height: 80, + ) + : + Image.asset( + "assets/image/logout_s.png", + width: 80, + height: 80, + ), + Padding( + padding: EdgeInsets.only(top: 10, bottom: 6), + child: Text( + (balance == "0.00" && money == "0.00") ? "注销账号成功!" : "注销申请提交失败!", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF353535), + ), + ), + ), + Padding( + padding: EdgeInsets.only(bottom: 13), + child: Text( + (balance == "0.00" && money == "0.00") ? "由于当于帐号已注销,系统将自动退出登录":"您的平台余额及店铺余额未使用完!", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + height: 1.2, + fontWeight: MyFontWeight.regular, + color: Colors.black, + ), + ), + ), + if(balance != "0.00" && money != "0.00" || balance != "0.00" || money != "0.00") + Text( + "平台余额:¥ $money", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xFF353535), + ), + ), + if(balance != "0.00" && money != "0.00" || balance != "0.00" || money != "0.00") + Text( + "店铺余额:¥ $balance", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xFF353535), + ), + ), + SizedBox( + height:36.h, + ), + InkWell( + child: BorderText( + text: "我知道了", + textColor: Color(0xFF32A060), + fontSize: 16.sp, + fontWeight: FontWeight.bold, + borderColor: Color(0xFF32A060), + radius:25, + padding: EdgeInsets.all(12), + borderWidth: 1, + ), + onTap: () { + if(balance != "0.00" && money != "0.00" || balance != "0.00" || money != "0.00"){ + Navigator.of(context).pop(); + return; + } + logout(); + }, + ) + ], + ), + ), + ); + }, + ); + } + + logOut() async { + SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); + sharedPreferences.setString("token", ""); + sharedPreferences.setString("user", ""); + sharedPreferences.setString("userJson", ""); + sharedPreferences.setString("userId", ""); + sharedPreferences.setString("mobile", ""); + sharedPreferences.setString("nick", ""); + + Navigator.of(context) + .pushNamedAndRemoveUntil('/router/login_page', (route) => false); + if (xgFlutterPlugin != null) { + xgFlutterPlugin.stopXg(); + } + } +} diff --git a/lib/setting/logout_page.dart b/lib/setting/logout_page.dart new file mode 100644 index 00000000..1397d73e --- /dev/null +++ b/lib/setting/logout_page.dart @@ -0,0 +1,293 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:huixiang/view_widget/border_text.dart'; +import 'package:huixiang/view_widget/my_appbar.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/view_widget/round_button.dart'; + +class LogoutPage extends StatefulWidget { + @override + State createState() { + return _LogoutPage(); + } +} + +class _LogoutPage extends State { + var controller = new ScrollController(); + var checkStatus = false; + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: MyAppBar( + title: "帐号注销说明", + titleColor: Colors.black, + titleSize: 18.sp, + background: Colors.transparent, + leadingColor: Colors.black, + ), + body: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + child: SingleChildScrollView( + physics: BouncingScrollPhysics(), + // child: Column( + // children: [ + // WebView( + // initialUrl: 'http://huixiang.lotus-wallet.com/user.html', + // ), + // ], + // ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: 5), + child: Align( + alignment: Alignment.center, + child: Text( + "注销协议", + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF1A1A1A), + ), + ), + ), + ), + Padding( + padding: + EdgeInsets.only(top: 16, bottom: 8, right: 20, left: 20), + child: Text( + "特别提示", + style: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF1A1A1A), + ), + ), + ), + _textRich( + "您在申请注销流程中点击同意前,应当认真阅读《帐号注销协议》(以下简称“本协议”)。特别提醒您,当您成功提交注销申请后,即表示您已充分阅读、理解并接受本协议的全部内容。阅读本协议的过程中,如果您不同意相关任何条款,请您立即停止帐号注销程序"), + Padding( + padding: + EdgeInsets.only(top: 12, bottom: 8, right: 20, left: 20), + child: Text( + "您已了解并同意帐号注销后,将要自行承担以下后果:", + style: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.semi_bold, + height: 1.5, + color: Color(0xFF1A1A1A), + ), + ), + ), + _textRich( + "1.账号一旦注销,您将无法登录、使用该账号(也包括无法再使用该账号作为第三方账号登录其他产品),也就是说您将无法再以此账号登录/使用/继续使用一心回乡集团旗下的相关产品与服务"), + _textRich( + "2.帐号注销说明我们将删除您的相关信息。您在该帐号下的个人信息、交易记录、业务数据、历史信息等删除后均将无法找回。"), + _textRich( + "3.账号一旦注销,您曾通过该账号登录、使用的一心回乡集团旗下的产品与服务下的所有内容、信息、数据、记录将会被删除,您也无法再检索、访问、获取、继续使用和找回,也无权要求我们找回(但法律法规另有规定或监管部门另有要求的除外),包括:" + "\n   •该账号下的个人资料(例如:头像、昵称等)及绑定信息(例如:绑定手机号);" + "\n   •该账号下的您的个人信息(同时您亦不再享有《一心回乡隐私政策》中约定的您的用户权利,但法律法规另有规定的除外);" + "\n   •该账号曾发表的所有内容(例如:音频、图片、照片、评论、互动、点赞等);" + "\n   •该账号所登录的门店小程序也将无法使用。同时,小程序内的个人信息,账户信息等也将删除"), + _textRich( + "4.您理解并同意,注销帐号后,您曾获得的充值余额、积分、优惠券及其他虚拟财产等将视为您自愿、主动放弃,无法继续使用,由此引起一切纠纷由您自行处理,我们不承担任何责任。"), + _textRich("5.请注意,注销您的帐号并不代表本帐号注销前的帐号行为和相关责任得到豁免或减轻。"), + Padding( + padding: + EdgeInsets.only(top: 12, bottom: 8, right: 20, left: 20), + child: Text( + "注销流程:", + style: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF1A1A1A), + ), + ), + ), + _textRich("1.首先,保在您开始注销操作前,请先进行以下确认,保证帐号、财产完全:" + "\n   •帐号处于安全状态;" + "\n   •请确认平台余额以及店铺余额清零,否则将不予注销;" + "\n   •请确认当下无正在进行中的交易,否则无法进行注销操作;。"), + _textRich( + "2.勾选《一心回乡账号注销协议》,点击注销后,系统将判定帐号是否符合注销条件,符合后进行手机号验证,输入正确验证码后既注销完成。"), + Padding( + padding: + EdgeInsets.only(top: 12, bottom: 8, right: 20, left: 20), + child: Text( + "协议附则:", + style: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF1A1A1A), + ), + ), + ), + _textRich( + "1.一心回乡有权在必要时修改本协议,您可以在相关页面查阅最新的本协议。您的任何使用本功能的行为,即视为您已经阅读并同意本协议及相应更新。"), + _textRich( + "2.本协议的拟定、解释均以中文为准。除双方另有约定外,任何有关本协议的翻译不得作为解释本协议或判定双方当事人意图之依据。"), + SizedBox( + height: 24.h, + ), + Container( + width: double.infinity, + margin: EdgeInsets.only(bottom: 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Checkbox( + value: checkStatus, + onChanged: (a) { + setState(() { + checkStatus = !checkStatus; + }); + }, + checkColor: Color(0xFFFFFFFF), + fillColor: MaterialStateProperty.all(Color(0xFF32A060)), + ), + Text( + "已了解《一心回乡账号注销协议》,并自行承担相关后果", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 11.sp, + fontWeight: MyFontWeight.medium, + color: Color(0xFF010101), + ), + ) + ], + ), + ), + GestureDetector( + onTap: () { + if (!checkStatus) { + SmartDialog.showToast("请勾选同意《一心回乡账号注销协议》", + alignment: Alignment.center); + return; + } + showDeleteDialog(); + }, + child: Container( + width: double.infinity, + height: 54.h, + alignment: Alignment.center, + color: checkStatus ? Color(0xFF32A060) : Color(0xFFD8D8D8), + child: Text( + "注销", + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFFFFFFFF), + ), + )), + ) + ], + ), + ), + ), + ); + } + + Widget _textRich(var text) { + return Padding( + padding: EdgeInsets.only(bottom: 8, right: 20, left: 20), + child: Text( + text, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.regular, + height: 1.7, + color: Colors.black), + ), + ); + } + + ///注销账户弹窗 + showDeleteDialog() { + showDialog( + context: context, + builder: (context) { + return AlertDialog( + content: Container( + width: MediaQuery.of(context).size.width - 84, + height: 130.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "注销账户会清空所有的信息和数据,确认要进行注销吗?", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 17.sp, + height: 1.2, + fontWeight: MyFontWeight.medium, + color: Colors.black, + ), + ), + SizedBox( + height: 20.h, + ), + Row( + children: [ + Expanded( + child: InkWell( + child: BorderText( + text: "确认注销", + textColor: Color(0xFF32A060), + fontSize: 16.sp, + fontWeight: FontWeight.bold, + borderColor: Color(0xFF32A060), + radius: 4, + padding: EdgeInsets.all(12), + borderWidth: 1, + ), + onTap: () { + Navigator.of(context).popAndPushNamed( + '/router/logout_ing'); + }, + ), + flex: 1, + ), + SizedBox( + width: 16.w, + ), + Expanded( + child: InkWell( + child: RoundButton( + text: "我再想想", + textColor: Colors.white, + radius: 4, + padding: EdgeInsets.all(12), + backgroup: Color(0xFF32A060), + fontSize: 16.sp, + fontWeight: FontWeight.bold, + ), + onTap: () { + Navigator.of(context).pop(); + }, + ), + flex: 1, + ), + ], + ) + ], + ), + ), + ); + }, + ); + } +} diff --git a/lib/setting/setting_page.dart b/lib/setting/setting_page.dart index 1ee9fccc..314ed979 100644 --- a/lib/setting/setting_page.dart +++ b/lib/setting/setting_page.dart @@ -146,6 +146,12 @@ class _SettingPage extends State { Navigator.of(context).pushNamed('/router/about_page'); }, ), + GestureDetector( + child: settingSingleItem("注销账号"), + onTap: () { + Navigator.of(context).pushNamed('/router/logout_page'); + }, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.end, diff --git a/pubspec.lock b/pubspec.lock index b3474fc4..a3579962 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -222,7 +222,7 @@ packages: name: flutter_layout_grid url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.3" + version: "1.0.6" flutter_localizations: dependency: "direct main" description: flutter @@ -307,7 +307,7 @@ packages: name: fluwx url: "https://pub.flutter-io.cn" source: hosted - version: "3.6.1+4" + version: "3.8.1" font_awesome_flutter: dependency: "direct main" description: