用户中心调整

This commit is contained in:
2022-10-26 10:29:16 +08:00
parent c10308bdff
commit 69f0a7a81e
14 changed files with 202 additions and 49 deletions

View File

@@ -1,3 +1,4 @@
import 'package:chat/configs/app_colors.dart';
import 'package:chat/configs/themes.dart'; import 'package:chat/configs/themes.dart';
import 'package:chat/controllers/group_controller.dart'; import 'package:chat/controllers/group_controller.dart';
import 'package:chat/controllers/moment_controller.dart'; import 'package:chat/controllers/moment_controller.dart';
@@ -8,11 +9,19 @@ import 'package:chat/services/auth_service.dart';
import 'package:chat/services/tabbar_service.dart'; import 'package:chat/services/tabbar_service.dart';
import 'package:chat/services/tim_service.dart'; import 'package:chat/services/tim_service.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart'; import 'package:get_storage/get_storage.dart';
Future<void> main() async { Future<void> main() async {
/// 设置状态栏样式,透明
SystemUiOverlayStyle style = const SystemUiOverlayStyle(
statusBarColor: AppColors.transparent,
systemNavigationBarColor: AppColors.nav,
);
SystemChrome.setSystemUIOverlayStyle(style);
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await GetStorage.init(); await GetStorage.init();

View File

@@ -1,7 +1,12 @@
import 'package:chat/middleware/auth_middleware.dart'; import 'package:chat/middleware/auth_middleware.dart';
import 'package:chat/views/contact/index/index_page.dart'; import 'package:chat/views/contact/index/index_page.dart';
import 'package:chat/views/user/info/avatar_page.dart';
import 'package:chat/views/user/info/index_page.dart';
import 'package:chat/views/user/info/nickname_page.dart';
import 'package:chat/views/user/qr_code/index_page.dart'; import 'package:chat/views/user/qr_code/index_page.dart';
import 'package:chat/views/user/safe/index_page.dart';
import 'package:chat/views/user/setting/index_page.dart'; import 'package:chat/views/user/setting/index_page.dart';
import 'package:chat/views/user/share/index_page.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
abstract class UserRoutes { abstract class UserRoutes {
@@ -10,6 +15,10 @@ abstract class UserRoutes {
static const String qrCode = '/user/qrCode'; static const String qrCode = '/user/qrCode';
static const String setting = '/user/setting'; static const String setting = '/user/setting';
static const String share = '/user/share'; static const String share = '/user/share';
static const String safe = '/user/safe';
static const String info = '/user/info';
static const String infoNickname = '/user/info/nickname';
static const String infoAvatar = '/user/info/avatar';
static GetPage router = GetPage( static GetPage router = GetPage(
name: UserRoutes.index, name: UserRoutes.index,
@@ -18,6 +27,10 @@ abstract class UserRoutes {
], ],
page: () => const ContactPage(), page: () => const ContactPage(),
children: [ children: [
GetPage(
name: '/share',
page: () => const UserSharePage(),
),
GetPage( GetPage(
name: '/qrCode', name: '/qrCode',
page: () => const UserQrCodePage(), page: () => const UserQrCodePage(),
@@ -26,6 +39,24 @@ abstract class UserRoutes {
name: '/setting', name: '/setting',
page: () => const UserSettingPage(), page: () => const UserSettingPage(),
), ),
GetPage(
name: '/safe',
page: () => const UserSafePage(),
),
GetPage(
name: '/info',
page: () => const UserInfoPage(),
children: [
GetPage(
name: '/nickname',
page: () => const UserInfoNicknamePage(),
),
GetPage(
name: '/avatar',
page: () => const UserInfoAvatarPage(),
),
],
),
], ],
); );
} }

View File

@@ -71,7 +71,7 @@ class AuthService extends GetxService {
} }
/// 退出登录 /// 退出登录
void logout() async { Future<void> logout() async {
await TencentImSDKPlugin.v2TIMManager.logout(); await TencentImSDKPlugin.v2TIMManager.logout();
_box.remove('userSig'); _box.remove('userSig');
_box.remove('userId'); _box.remove('userId');

View File

@@ -93,6 +93,7 @@ class TimService extends GetxService {
if (loginResult.code != 0) { if (loginResult.code != 0) {
UiTools.toast(loginResult.desc); UiTools.toast(loginResult.desc);
await AuthService.to.logout();
} }
Get.put(TimConversationService()); Get.put(TimConversationService());

View File

@@ -197,7 +197,7 @@ class ImTools {
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
left: 16.0, left: 16.0,
), ),
color: Colors.grey[200], color: AppColors.page,
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Text( child: Text(
tag, tag,

View File

@@ -50,7 +50,7 @@ class HomePage extends StatelessWidget {
PreferredSizeWidget _appBar() { PreferredSizeWidget _appBar() {
return AppBar( return AppBar(
title: const Text('聊聊'), title: const Text('消息'),
actions: [ actions: [
IconButton( IconButton(
onPressed: () { onPressed: () {

View File

@@ -2,7 +2,7 @@ import 'package:chat/configs/app_colors.dart';
import 'package:chat/services/tabbar_service.dart'; import 'package:chat/services/tabbar_service.dart';
import 'package:chat/views/contact/index/index_page.dart'; import 'package:chat/views/contact/index/index_page.dart';
import 'package:chat/views/home/index_page.dart'; import 'package:chat/views/home/index_page.dart';
import 'package:chat/views/user/index/user_page.dart'; import 'package:chat/views/user/index/index_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:proste_indexed_stack/proste_indexed_stack.dart'; import 'package:proste_indexed_stack/proste_indexed_stack.dart';

View File

@@ -0,0 +1,80 @@
import 'package:chat/configs/app_colors.dart';
import 'package:chat/routes/user_routes.dart';
import 'package:chat/views/home/widgets/action_item.dart';
import 'package:chat/views/user/index/widgets/user_top_bar.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class UserPage extends StatefulWidget {
const UserPage({Key? key}) : super(key: key);
@override
_UserPageState createState() => _UserPageState();
}
class _UserPageState extends State<UserPage> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
children: [
const UserTopBar(),
const Divider(
height: 0,
color: AppColors.border,
),
const SizedBox(height: 8),
const Divider(
height: 0,
color: AppColors.border,
),
ActionItem(
'分享邀请',
onTap: () {
Get.toNamed(UserRoutes.share);
},
),
const Divider(
height: 0,
color: AppColors.border,
indent: 16,
),
ActionItem(
'安全设置',
onTap: () {
Get.toNamed(UserRoutes.safe);
},
),
const Divider(
height: 0,
color: AppColors.border,
indent: 16,
),
ActionItem(
'设置中心',
onTap: () {
Get.toNamed(UserRoutes.setting);
},
),
const Divider(
height: 0,
color: AppColors.border,
indent: 16,
),
ActionItem(
'检查更新',
onTap: () {
Get.toNamed(UserRoutes.setting);
},
),
const Divider(
height: 0,
color: AppColors.border,
),
],
),
),
);
}
}

View File

@@ -1,42 +0,0 @@
import 'package:chat/routes/user_routes.dart';
import 'package:chat/views/user/index/widgets/user_top_bar.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class UserPage extends StatefulWidget {
const UserPage({Key? key}) : super(key: key);
@override
_UserPageState createState() => _UserPageState();
}
class _UserPageState extends State<UserPage> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
children: [
const UserTopBar(),
const SizedBox(height: 8),
ListTile(
onTap: () {
Get.toNamed(UserRoutes.share);
},
title: const Text('分享邀请'),
),
ListTile(
onTap: () {
Get.toNamed(UserRoutes.setting);
},
title: const Text('设置中心'),
),
const ListTile(
title: Text('检查更新'),
),
],
),
),
);
}
}

View File

@@ -24,10 +24,15 @@ class UserTopBar extends StatelessWidget {
return Row( return Row(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
CustomAvatar( InkWell(
onTap: () {
Get.toNamed(UserRoutes.info);
},
child: CustomAvatar(
_.userInfo.value.avatar, _.userInfo.value.avatar,
size: 64, size: 64,
), ),
),
const SizedBox(width: 16), const SizedBox(width: 16),
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,

View File

@@ -0,0 +1,15 @@
import 'package:flutter/material.dart';
class UserInfoAvatarPage extends StatefulWidget {
const UserInfoAvatarPage({Key? key}) : super(key: key);
@override
State<UserInfoAvatarPage> createState() => _UserInfoAvatarPageState();
}
class _UserInfoAvatarPageState extends State<UserInfoAvatarPage> {
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
class UserInfoPage extends StatefulWidget {
const UserInfoPage({Key? key}) : super(key: key);
@override
State<UserInfoPage> createState() => _UserInfoPageState();
}
class _UserInfoPageState extends State<UserInfoPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('用户资料'),
),
);
}
}

View File

@@ -0,0 +1,15 @@
import 'package:flutter/material.dart';
class UserInfoNicknamePage extends StatefulWidget {
const UserInfoNicknamePage({Key? key}) : super(key: key);
@override
State<UserInfoNicknamePage> createState() => _UserInfoNicknamePageState();
}
class _UserInfoNicknamePageState extends State<UserInfoNicknamePage> {
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
class UserSafePage extends StatefulWidget {
const UserSafePage({Key? key}) : super(key: key);
@override
State<UserSafePage> createState() => _UserSafePageState();
}
class _UserSafePageState extends State<UserSafePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('安全设置'),
),
body: Container(),
);
}
}