288 lines
9.4 KiB
Dart
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();
|
|
}
|
|
}
|
|
}
|