import 'dart:io'; import 'package:flustars/flustars.dart' hide ScreenUtil; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_facebook_auth/flutter_facebook_auth.dart'; import 'package:flutter_kinetra/dio_cilent/kt_apis.dart'; import 'package:flutter_kinetra/kt_pages/kt_mine/state.dart'; import 'package:flutter_kinetra/kt_utils/kt_string_extend.dart'; import 'package:flutter_kinetra/kt_utils/kt_utils.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import '../../dio_cilent/kt_request.dart'; import '../../kt_model/kt_login_bean.dart'; import '../../kt_model/kt_user_info.dart'; import '../../kt_utils/kt_keys.dart'; import '../../kt_utils/kt_toast_utils.dart'; import '../../kt_widgets/kt_dialog.dart'; import '../kt_routes.dart'; import '../kt_webview_page.dart'; class KtMineLogic extends GetxController { final state = KtMineState(); bool get isLogin => KtUtils.isNotEmpty(SpUtil.getString(KtKeys.token)) && !(state.userInfo.isTourist ?? false); final RefreshController refreshController = RefreshController(); @override void onReady() { super.onReady(); getUserInfo(); } getUserInfo() async { try { ApiResponse res = await KtHttpClient().request( KtApis.getCustomerInfo, method: HttpMethod.get, ); refreshController.refreshCompleted(); if (res.success) { state.userInfo = KtUserInfo.fromJson(res.data); update(); } } catch (e) { refreshController.refreshCompleted(); } } showLoginDialog() { Get.bottomSheet( isScrollControlled: true, Container( height: 510.w, width: ScreenUtil().screenWidth, padding: EdgeInsets.fromLTRB(0.w, 68.w, 0.w, 20.w), decoration: BoxDecoration( // borderRadius: BorderRadius.vertical(top: Radius.circular(12.w)), image: DecorationImage( image: AssetImage('login_sheet_bg.png'.ktIcon), fit: BoxFit.fill, ), ), child: Column( children: [ Image.asset('login_bg.png'.ktIcon, width: 322.w), SizedBox(height: 14.w), Text( 'Welcome to LimeTale', style: TextStyle( fontSize: 20.sp, color: Color(0xFF1C1C1C), fontWeight: FontWeight.w700, fontStyle: FontStyle.italic, ), ), const Spacer(), GestureDetector( onTap: loginWithFacebook, child: Container( width: ScreenUtil().screenWidth - 30.w, padding: EdgeInsets.fromLTRB(35.w, 13.w, 30.w, 13.w), decoration: BoxDecoration( border: Border.all(width: 1.w, color: Color(0xFF1E1E20)), borderRadius: BorderRadius.circular(100), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Image.asset('ic_fb.png'.ktIcon, width: 20.w), Text( 'Login with Facebook', style: TextStyle( fontSize: 14.sp, color: Color(0xFF1C1C1C), ), ), Image.asset('ic_right_arrow.png'.ktIcon, width: 14.w), ], ), ), ), if (Platform.isIOS) GestureDetector( child: Container( width: ScreenUtil().screenWidth - 30.w, margin: EdgeInsets.only(top: 20.w), padding: EdgeInsets.fromLTRB(35.w, 13.w, 30.w, 13.w), decoration: BoxDecoration( color: Color(0xFF1C1C1C), borderRadius: BorderRadius.circular(100), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Image.asset('ic_apple.png'.ktIcon, width: 20.w), Text( 'Login with Facebook', style: TextStyle(fontSize: 14.sp, color: Colors.white), ), Image.asset('ic_right_white.png'.ktIcon, width: 14.w), ], ), ), ), const Spacer(), Column( children: [ Text( 'By logging in you agree to:', style: TextStyle(fontSize: 12.sp, color: Color(0xFF777777)), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ GestureDetector( onTap: () => Get.to( () => KtWebViewPage( url: KtApis.WEB_SITE_POLICY, title: "User Agreement", ), ), child: Text( 'User Agreement', style: TextStyle( fontSize: 12.sp, decoration: TextDecoration.underline, // 添加下划线 color: Color(0xFF777777), ), ), ), Text( ' & ', style: TextStyle( fontSize: 12.sp, color: Color(0xFF777777), ), ), GestureDetector( onTap: () => Get.to( () => KtWebViewPage( url: KtApis.WEB_SITE_PRIVATE, title: "Privacy Policy", ), ), child: Text( 'Privacy Policy', style: TextStyle( fontSize: 12.sp, decoration: TextDecoration.underline, // 添加下划线 color: Color(0xFF777777), ), ), ), ], ), ], ), ], ), ), ); } loginWithFacebook() async { final LoginResult result = await FacebookAuth.instance.login( permissions: ['email', 'public_profile'], loginBehavior: LoginBehavior.nativeWithFallback, ); if (result.status == LoginStatus.success) { try { EasyLoading.show(status: '', dismissOnTap: true); final userData = await FacebookAuth.instance.getUserData(); final String facebookAvatar = userData['picture']?['data']?['url'] ?? ""; final String facebookId = userData['id'] ?? ""; final String facebookEmail = userData['email'] ?? ""; final String facebookName = userData['name'] ?? ""; loginRequest( facebookAvatar, facebookEmail, facebookName, 'facebook', facebookId, ); } catch (e) { EasyLoading.dismiss(); } } else { KtToastUtils.showError('Login failed'); debugPrint('---facebook failed-:${result.status} ${result.message}'); } } loginRequest(String avatar, email, familyName, platform, thirdId) async { Map params = { "avator": avatar, "email": email, "family_name": familyName, "platform": platform, "third_id": thirdId, }; ApiResponse res = await KtHttpClient().request(KtApis.login, data: params); EasyLoading.dismiss(); if (res.success) { debugPrint('----old token"${SpUtil.getString(KtKeys.token)}'); String? token = SpUtil.getString(KtKeys.token); await KtHttpClient().request( KtApis.leaveApp, data: {'PostAuthorization': token ?? ''}, ); await KtHttpClient().request( KtApis.onLine, data: {'PostAuthorization': token ?? ''}, ); KtLoginBean data = KtLoginBean.fromJson(res.data); SpUtil.putString(KtKeys.token, data.token ?? ''); KtHttpClient().setAuthToken(data.token ?? ''); debugPrint('----new token"${SpUtil.getString(KtKeys.token)}'); await KtHttpClient().request( KtApis.enterTheApp, data: {'is_open_notice': 0}, ); getUserInfo(); // Get.offAllNamed(KtRoutes.home); } else { KtToastUtils.showError('Login Failed'); } } checkSignOut() { Get.dialog( KtDialog( topIcon: 'dialog_logout.png', title: 'Log out?', subTitle: 'Sign in again to access favorites', leftBtnText: 'Log Out', leftBtnFunc: signOut, rightBtnText: 'Stay', ), ); } signOut() async { String? token = SpUtil.getString(KtKeys.token); await KtHttpClient().request( KtApis.leaveApp, data: {'PostAuthorization': token ?? ''}, ); ApiResponse res = await KtHttpClient().request(KtApis.signOut); if (res.success) { KtToastUtils.showSuccess(placeholder: 'Logout Success'); // await UserUtil().register(toHome: false); getUserInfo(); } } }