login.dart 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'package:fast/constants.dart';
  4. import 'package:fast/model/model.dart';
  5. import 'package:fast/utils/api.dart';
  6. import 'package:fast/utils/global.dart';
  7. import 'package:fast/utils/http_utils.dart';
  8. import 'package:fast/utils/size_fit.dart';
  9. import 'package:fast/utils/storage.dart';
  10. import 'package:fast/view/component/header.dart';
  11. import 'package:fast/view/component/toast.dart';
  12. import 'package:fast/view/invite_code.dart';
  13. import 'package:fast/view/phone.dart';
  14. import 'package:fast/view/phone_code.dart';
  15. import 'package:flutter/material.dart';
  16. import 'package:fluwx/fluwx.dart';
  17. import 'package:get/get.dart';
  18. import 'package:sign_in_with_apple/sign_in_with_apple.dart';
  19. class Login extends StatefulWidget {
  20. const Login({Key? key}) : super(key: key);
  21. @override
  22. State<Login> createState() => _LoginState();
  23. }
  24. class _LoginState extends State<Login> {
  25. StreamSubscription? subscription;
  26. bool showSocial = false;
  27. @override
  28. void initState() {
  29. showSocial = Global().thirdLogin;
  30. initWxApi();
  31. getConfig();
  32. super.initState();
  33. }
  34. Future getConfig() async {
  35. Map<String, dynamic> data = await HttpUtils.get(Api.serverConfig);
  36. Global().thirdLogin = data['thirdparty_login'];
  37. Global().pushEnable = data['push_enable'];
  38. Global().payEnable = data['pay_enable'];
  39. setState(() {
  40. showSocial = data['thirdparty_login'];
  41. });
  42. }
  43. Future initWxApi() async {
  44. bool isSuccess = await registerWxApi(
  45. appId: 'wxa8557217acf4f532',
  46. universalLink: 'https://api.fast.liveplus.fun/');
  47. if (isSuccess) {
  48. subscription = weChatResponseEventHandler.listen((event) {
  49. if (event is WeChatPaymentResponse) {
  50. } else if (event is WeChatAuthResponse) {
  51. print('9527');
  52. login(event.code);
  53. } else if (event is WeChatShareResponse) {}
  54. });
  55. }
  56. }
  57. @override
  58. void dispose() {
  59. if (subscription != null) {
  60. subscription!.cancel();
  61. }
  62. super.dispose();
  63. }
  64. Future login(code) async {
  65. Map<String, dynamic> data = await HttpUtils.post(Api.outhLogin, data: {
  66. "app_version": "1.0",
  67. "client_type": Platform.isAndroid ? "ANDROID" : "IOS",
  68. "client_version": "1.0",
  69. "type": "WX",
  70. "code": code
  71. });
  72. UserBean user = UserBean.fromJson(data);
  73. Global().userBean = user;
  74. Global().token = data['token'];
  75. Global().balance = user.rjvBalance;
  76. if (user.inputInviteCode) {
  77. //没得验证码绑定,可以输入一波
  78. //首次注册登录,弹获得多少逆龄石
  79. showRegisterSuccessToast();
  80. Timer(const Duration(milliseconds: 1300), () {
  81. Get.to(() => const InviteCode());
  82. Global().showLogin = false;
  83. Global().mainPage!.showIndex();
  84. Global().mainPage!.login();
  85. StorageUtil().prefs!.setString("token", data['token']);
  86. });
  87. } else {
  88. Global().showLogin = false;
  89. Global().mainPage!.showIndex();
  90. Global().mainPage!.login();
  91. StorageUtil().prefs!.setString("token", data['token']);
  92. }
  93. }
  94. showRegisterSuccessToast() {
  95. if (mounted) {
  96. showDialog(
  97. context: context,
  98. barrierDismissible: false,
  99. barrierColor: Colors.transparent,
  100. builder: (BuildContext context) {
  101. return Toast(
  102. title: '成功注册',
  103. content: Row(
  104. mainAxisAlignment: MainAxisAlignment.center,
  105. children: [
  106. Text(
  107. '+9',
  108. style: TextStyle(
  109. color: Colors.white,
  110. fontSize: 16.px,
  111. fontWeight: FontWeight.w800,
  112. fontFamily: 'Exo2',
  113. decoration: TextDecoration.none),
  114. ),
  115. SizedBox(
  116. width: 3.px,
  117. ),
  118. Image.asset(
  119. 'assets/images/stone.png',
  120. width: 24.px,
  121. height: 24.px,
  122. )
  123. ],
  124. ),
  125. );
  126. });
  127. }
  128. }
  129. Future wxLogin() async {
  130. sendWeChatAuth(scope: 'snsapi_userinfo');
  131. // if (Platform.isAndroid) {
  132. // Global().token =
  133. // 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOGUyMzAxM2UxMDY3NjU2ODc0ZDQ2ZjNmNDk0OWMyMGIiLCJpc3MiOiJDT0RFUEFBUy5DT00iLCJuaWNrbmFtZSI6IkzDqW9uIiwidHlwIjoiQmVhcmVyIiwic2Vzc2lvbl9zdGF0ZSI6ImRmNzI2NDFiZWQ4NjhhZDcyNmJmNmU0YzNhYWU2NTgwIiwiZXhwIjoxNjgyOTE0MzE5LCJpYXQiOjE2NTEzNzgzMTl9.2j7rR0ZuaolTwluwp9tdGfvPlboV46yJbjY2baKNh7w';
  134. // Global().showLogin = false;
  135. // Global().mainPage!.login();
  136. // StorageUtil().prefs!.setString("token", Global().token);
  137. // // sendWeChatAuth(scope: 'snsapi_userinfo');
  138. // } else {
  139. // Global().token =
  140. // 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOGUyMzAxM2UxMDY3NjU2ODc0ZDQ2ZjNmNDk0OWMyMGIiLCJpc3MiOiJDT0RFUEFBUy5DT00iLCJuaWNrbmFtZSI6IkzDqW9uIiwidHlwIjoiQmVhcmVyIiwic2Vzc2lvbl9zdGF0ZSI6ImRmNzI2NDFiZWQ4NjhhZDcyNmJmNmU0YzNhYWU2NTgwIiwiZXhwIjoxNjgyOTE0MzE5LCJpYXQiOjE2NTEzNzgzMTl9.2j7rR0ZuaolTwluwp9tdGfvPlboV46yJbjY2baKNh7w';
  141. // Global().showLogin = false;
  142. // Global().mainPage!.login();
  143. // StorageUtil().prefs!.setString("token", Global().token);
  144. // }
  145. }
  146. @override
  147. Widget build(BuildContext context) {
  148. SizeFit.initialize(context);
  149. return Material(
  150. child: Container(
  151. color: kBgColor,
  152. child: Column(
  153. children: [
  154. Header(
  155. isIndexPage: false,
  156. ),
  157. Container(
  158. margin: EdgeInsets.only(top: 30.px),
  159. width: 128.px,
  160. height: 128.px,
  161. child: Image.asset("assets/images/logo.png"),
  162. ),
  163. if (showSocial)
  164. GestureDetector(
  165. onTap: () {
  166. wxLogin();
  167. // Global().mainPage!.login();
  168. },
  169. child: Container(
  170. width: 228.px,
  171. height: 48.px,
  172. margin: EdgeInsets.only(top: 48.px, bottom: 30.px),
  173. decoration: BoxDecoration(
  174. borderRadius: BorderRadius.all(Radius.circular(24.px)),
  175. color: kThemeColor),
  176. child: Row(
  177. mainAxisAlignment: MainAxisAlignment.center,
  178. children: [
  179. Image.asset(
  180. 'assets/images/wechat_login.png',
  181. width: 30.px,
  182. height: 24.px,
  183. ),
  184. SizedBox(
  185. width: 6.px,
  186. ),
  187. Text(
  188. '微信登录',
  189. style: TextStyle(
  190. color: const Color(0xFF000D1F),
  191. fontSize: 16.px,
  192. fontWeight: FontWeight.bold),
  193. )
  194. ],
  195. ),
  196. ),
  197. ),
  198. GestureDetector(
  199. onTap: () {
  200. Get.to(() => Phone(
  201. type: 1,
  202. ));
  203. },
  204. child: Text(
  205. '手机短信验证码登录',
  206. style:
  207. TextStyle(color: const Color(0x99C4CCDA), fontSize: 14.px),
  208. ),
  209. ),
  210. // SignInWithAppleButton(
  211. // onPressed: () async {
  212. // try{
  213. // final credential = await SignInWithApple.getAppleIDCredential(
  214. // scopes: [
  215. // AppleIDAuthorizationScopes.email,
  216. // AppleIDAuthorizationScopes.fullName,
  217. // ],
  218. // );
  219. // print(credential);
  220. // } on Error catch (e){
  221. // print(e.toString());
  222. // }
  223. // },
  224. // )
  225. ],
  226. ),
  227. ),
  228. );
  229. }
  230. }