288 lines
9.4 KiB
Dart

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<String, dynamic> 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();
}
}
}