|
|
|
|
|
|
|
import 'package:bot_toast/bot_toast.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter/services.dart';
|
|
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
|
|
import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart';
|
|
|
|
|
|
|
|
import 'package:project_telephony/base/base_style.dart';
|
|
|
|
import 'package:project_telephony/ui/login/login_page.dart';
|
|
|
|
|
|
|
|
import 'package:project_telephony/ui/tab_navigator.dart';
|
|
|
|
import 'package:project_telephony/ui/user/content_authority_page.dart';
|
|
|
|
import 'package:project_telephony/ui/user/members_page.dart';
|
|
|
|
import 'package:project_telephony/ui/user/privacy_rights_page.dart';
|
|
|
|
import 'package:project_telephony/ui/widget/image_scaffold.dart';
|
|
|
|
import 'package:project_telephony/ui/widget/plone_bottom.dart';
|
|
|
|
import 'package:project_telephony/ui/widget/plone_image_picker.dart';
|
|
|
|
import 'package:project_telephony/utils/headers.dart';
|
|
|
|
import 'package:project_telephony/utils/permissionutils.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:telephony/telephony.dart';
|
|
|
|
import 'package:velocity_x/velocity_x.dart';
|
|
|
|
|
|
|
|
import '../../constants/api.dart';
|
|
|
|
import '../../model/network/api_client.dart';
|
|
|
|
|
|
|
|
import '../../providers/user_provider.dart';
|
|
|
|
import '../../utils/toast/cloud_toast.dart';
|
|
|
|
import '../../utils/user_tool.dart';
|
|
|
|
import 'content_details_page.dart';
|
|
|
|
|
|
|
|
import '../home/home_page.dart';
|
|
|
|
|
|
|
|
class UserPage extends StatefulWidget {
|
|
|
|
const UserPage({Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
@override
|
|
|
|
_UserPageState createState() => _UserPageState();
|
|
|
|
}
|
|
|
|
|
|
|
|
final Telephony telephony = Telephony.instance;
|
|
|
|
|
|
|
|
class _UserPageState extends State<UserPage> {
|
|
|
|
// bool vle = PermissionStatus.denied.isGranted;
|
|
|
|
//bool vle =PermissionStatus.denied.isGranted;
|
|
|
|
final userProvider = Provider.of<UserProvider>(Get.context!, listen: false);
|
|
|
|
bool vle=false;
|
|
|
|
bool isVip=false;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
|
|
|
if(userProvider.isLogin){
|
|
|
|
if(userProvider.userInfo.isVip==1){
|
|
|
|
isVip=true;
|
|
|
|
}else{
|
|
|
|
isVip=false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return CloudScaffold(
|
|
|
|
systemStyle: const SystemUiOverlayStyle(
|
|
|
|
statusBarIconBrightness: Brightness.dark,
|
|
|
|
// systemNavigationBarColor: Colors.white,
|
|
|
|
),
|
|
|
|
path: Assets.images.bg.path,
|
|
|
|
bodyColor: Colors.white,
|
|
|
|
extendBody: true,
|
|
|
|
body: Column(children: [
|
|
|
|
_getUser(),
|
|
|
|
72.hb,
|
|
|
|
_getBanner(),
|
|
|
|
120.hb,
|
|
|
|
_getSwitch(Assets.icons.switch1.path, "功能开关", true),
|
|
|
|
_getSwitch(Assets.icons.privacy.path, "隐私政策", false),
|
|
|
|
_getSwitch(Assets.icons.permissions.path, "权限说明", false),
|
|
|
|
_getSwitch(Assets.icons.sms.path, "短信标签", false),
|
|
|
|
// const Spacer(),
|
|
|
|
182.hb,
|
|
|
|
userProvider.isLogin
|
|
|
|
? PloneBottom(
|
|
|
|
border: false,
|
|
|
|
onTap: () async {
|
|
|
|
var cancel = CloudToast.loading;
|
|
|
|
var base = await apiClient.request(API.app.logout,
|
|
|
|
showMessage: true);
|
|
|
|
if (base.code == 0) {
|
|
|
|
UserTool.userProvider.logout();
|
|
|
|
Get.offAll(const TabNavigator());
|
|
|
|
}
|
|
|
|
cancel();
|
|
|
|
},
|
|
|
|
textColor: const Color(0xFF1890FF),
|
|
|
|
color1: const Color(0xFFEBF5FF),
|
|
|
|
color2: const Color(0xFFEBF5FF),
|
|
|
|
text: "退出登录",
|
|
|
|
)
|
|
|
|
: const SizedBox()
|
|
|
|
]),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
//头像
|
|
|
|
_getUser() {
|
|
|
|
return Container(
|
|
|
|
margin: EdgeInsets.only(left: 64.w, right: 64.w, top: 216.w),
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
GestureDetector(
|
|
|
|
onTap: () {
|
|
|
|
Get.to(() => const LoginPage());
|
|
|
|
},
|
|
|
|
child: Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
Text(
|
|
|
|
userProvider.isLogin ? userProvider.userInfo.name : "登录/注册",
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: BaseStyle.fontSize48,
|
|
|
|
color: BaseStyle.color333333,
|
|
|
|
fontWeight: FontWeight.bold),
|
|
|
|
),
|
|
|
|
24.hb,
|
|
|
|
Text(
|
|
|
|
userProvider.isLogin ? "欢迎您登录短信帮手" : "登录获取更多信息",
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: BaseStyle.fontSize28,
|
|
|
|
color: BaseStyle.color333333),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
const Spacer(),
|
|
|
|
GestureDetector(
|
|
|
|
onTap: () async {
|
|
|
|
var value = await CloudImagePicker.pickSingleImage(title: '选择图片');
|
|
|
|
if (value != null) {
|
|
|
|
BotToast.showText(text: '头像成功');
|
|
|
|
setState(() {});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
child: ClipOval(
|
|
|
|
child: Image.asset(
|
|
|
|
Assets.images.portrait.path,
|
|
|
|
height: 128.w,
|
|
|
|
width: 128.w,
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
//banner
|
|
|
|
_getBanner() {
|
|
|
|
return SizedBox(
|
|
|
|
// margin: EdgeInsets.symmetric(horizontal: 32.w),
|
|
|
|
height: 144.w,
|
|
|
|
child: Stack(children: [
|
|
|
|
Align(
|
|
|
|
child: SizedBox(
|
|
|
|
width: 622.w,
|
|
|
|
child: Image.asset(
|
|
|
|
Assets.images.banner.path,
|
|
|
|
fit: BoxFit.fill,
|
|
|
|
),
|
|
|
|
)),
|
|
|
|
Positioned(
|
|
|
|
child: Container(
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 112.w, vertical: 24.w),
|
|
|
|
// margin: EdgeInsets.symmetric(horizontal: 64.w, vertical: 16.w),
|
|
|
|
// padding: EdgeInsets.symmetric(),
|
|
|
|
child: Row(
|
|
|
|
children: [_getText(), const Spacer(), _getBotton()],
|
|
|
|
),
|
|
|
|
))
|
|
|
|
]),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
//banner botton
|
|
|
|
_getBotton() {
|
|
|
|
return GestureDetector(
|
|
|
|
onTap: () {
|
|
|
|
// print(vle);
|
|
|
|
Get.to(() => const MembersPage());
|
|
|
|
},
|
|
|
|
child: Container(
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 16.w),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
borderRadius: BorderRadius.circular(30.w),
|
|
|
|
gradient: const LinearGradient(
|
|
|
|
colors: [Color(0xFFFFF6D8), Color(0xFFFFEAB0)],
|
|
|
|
begin: Alignment.centerLeft,
|
|
|
|
end: Alignment.centerRight)),
|
|
|
|
child: Text(
|
|
|
|
isVip?"立即续费":"立即购买",
|
|
|
|
style: TextStyle(
|
|
|
|
color: const Color(0xFF001F3F), fontSize: BaseStyle.fontSize24),
|
|
|
|
)),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
//banner 文字
|
|
|
|
_getText() {
|
|
|
|
return Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
_getVip(),
|
|
|
|
16.hb,
|
|
|
|
Text(
|
|
|
|
isVip?"{$userProvider.userInfo.end}到期":"解锁全部功能",
|
|
|
|
style: TextStyle(color: Colors.white, fontSize: BaseStyle.fontSize24),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
_getVip() {
|
|
|
|
return Row(
|
|
|
|
children: [
|
|
|
|
Text(
|
|
|
|
"VIP",
|
|
|
|
style: TextStyle(
|
|
|
|
color: const Color(0xFFFFEAB0),
|
|
|
|
fontFamily: "BlackItalic",
|
|
|
|
fontSize: 32.sp),
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
width: 8.w,
|
|
|
|
height: 8.w,
|
|
|
|
alignment: Alignment.center,
|
|
|
|
margin: EdgeInsets.symmetric(horizontal: 8.w),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
color: const Color(0xFFFFEAB0),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Text(
|
|
|
|
isVip?"已成为会员":"未开通会员",
|
|
|
|
style: const TextStyle(
|
|
|
|
color: Color(
|
|
|
|
0xFFFFEAB0,
|
|
|
|
),
|
|
|
|
fontWeight: FontWeight.w700),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
//内容
|
|
|
|
_getSwitch(String url, String name, bool pd) {
|
|
|
|
return GestureDetector(
|
|
|
|
onTap: () async {
|
|
|
|
|
|
|
|
if(!pd){
|
|
|
|
switch(name){
|
|
|
|
case "短信标签":
|
|
|
|
Get.to(() => ContentDetailsPage(
|
|
|
|
content:
|
|
|
|
userProvider.isLogin ? userProvider.userInfo.tag : "",
|
|
|
|
ploneBack: (String textContent) {
|
|
|
|
// print("这是数据" + textContent);
|
|
|
|
// textList.setAll(index, {textContent});
|
|
|
|
},
|
|
|
|
));
|
|
|
|
break;
|
|
|
|
case"隐私政策":
|
|
|
|
Get.to(() => const ContentAuthorityPage());
|
|
|
|
break;
|
|
|
|
case"权限说明":
|
|
|
|
Get.to(() => PrivacyRightsPage(
|
|
|
|
name: name,
|
|
|
|
));
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
child: Container(
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
|
|
|
child: ListTile(
|
|
|
|
// onTap: (() {}),
|
|
|
|
leading: Image.asset(
|
|
|
|
url,
|
|
|
|
height: 54.w,
|
|
|
|
width: 56.w,
|
|
|
|
fit: BoxFit.fill,
|
|
|
|
),
|
|
|
|
title: Text(
|
|
|
|
name,
|
|
|
|
style: TextStyle(
|
|
|
|
color: BaseStyle.color333333,
|
|
|
|
fontSize: BaseStyle.fontSize34,
|
|
|
|
fontWeight: FontWeight.bold),
|
|
|
|
),
|
|
|
|
trailing: pd
|
|
|
|
? Switch(
|
|
|
|
value: vle,
|
|
|
|
onChanged: (value) async {
|
|
|
|
await Permission.phone.request();
|
|
|
|
// List<Permission> permissions = [
|
|
|
|
// Permission.sms,
|
|
|
|
// Permission.phone,
|
|
|
|
// ];
|
|
|
|
// PermissionHelper.check(permissions, onSuccess: () {
|
|
|
|
// print('onSuccess');
|
|
|
|
// }, onFailed: () {
|
|
|
|
// print('onFailed');
|
|
|
|
// }, onOpenSetting: () {
|
|
|
|
// print('onOpenSetting');
|
|
|
|
// openAppSettings();
|
|
|
|
// });
|
|
|
|
// setState(() {
|
|
|
|
// vle = value;
|
|
|
|
// });
|
|
|
|
}
|
|
|
|
)
|
|
|
|
: const Icon(Icons.keyboard_arrow_right)),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|