用户中心调整
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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: () {
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
80
lib/views/user/index/index_page.dart
Normal file
80
lib/views/user/index/index_page.dart
Normal 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,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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('检查更新'),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -24,9 +24,14 @@ class UserTopBar extends StatelessWidget {
|
|||||||
return Row(
|
return Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
children: [
|
children: [
|
||||||
CustomAvatar(
|
InkWell(
|
||||||
_.userInfo.value.avatar,
|
onTap: () {
|
||||||
size: 64,
|
Get.toNamed(UserRoutes.info);
|
||||||
|
},
|
||||||
|
child: CustomAvatar(
|
||||||
|
_.userInfo.value.avatar,
|
||||||
|
size: 64,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
Column(
|
Column(
|
||||||
|
|||||||
15
lib/views/user/info/avatar_page.dart
Normal file
15
lib/views/user/info/avatar_page.dart
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
19
lib/views/user/info/index_page.dart
Normal file
19
lib/views/user/info/index_page.dart
Normal 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('用户资料'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
15
lib/views/user/info/nickname_page.dart
Normal file
15
lib/views/user/info/nickname_page.dart
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
20
lib/views/user/safe/index_page.dart
Normal file
20
lib/views/user/safe/index_page.dart
Normal 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(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user