From 0a81762ba14688d77663e2b855709732443f4ec9 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 20 Oct 2022 16:08:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/controllers/moment_controller.dart | 14 ++--- lib/controllers/publish_controller.dart | 6 +- lib/models/user_info_model.dart | 8 +++ .../moment_provider.dart} | 4 +- lib/routes/app_routes.dart | 4 +- lib/routes/user_routes.dart | 7 +++ lib/services/auth_service.dart | 14 +++-- lib/services/tim_service.dart | 2 +- lib/views/search/index_page.dart | 57 +++++++++++++++++++ lib/views/user/index/user_page.dart | 56 +++++++++++++++++- lib/views/user/setting/index_page.dart | 30 ++++++++++ lib/views/user/share/index_page.dart | 20 +++++++ 12 files changed, 197 insertions(+), 25 deletions(-) rename lib/{services/moment_service.dart => providers/moment_provider.dart} (98%) create mode 100644 lib/views/search/index_page.dart create mode 100644 lib/views/user/setting/index_page.dart create mode 100644 lib/views/user/share/index_page.dart diff --git a/lib/controllers/moment_controller.dart b/lib/controllers/moment_controller.dart index 388a2d9..6a799ce 100644 --- a/lib/controllers/moment_controller.dart +++ b/lib/controllers/moment_controller.dart @@ -1,6 +1,6 @@ import 'package:chat/models/moment/moment_model.dart'; import 'package:chat/routes/moments_routes.dart'; -import 'package:chat/services/moment_service.dart'; +import 'package:chat/providers/moment_provider.dart'; import 'package:chat/utils/ui_tools.dart'; import 'package:chat/views/moments/index/widgets/quick_reply_bar.dart'; import 'package:flutter/material.dart'; @@ -43,7 +43,7 @@ class MomentController extends GetxController { } Future refreshList() async { - final res = await MomentService.fetchMomentList(); + final res = await MomentProvider.fetchMomentList(); if (res != null) { momentData.value = res; } @@ -51,7 +51,7 @@ class MomentController extends GetxController { } Future loadMoreList() async { - final res = await MomentService.fetchMomentList( + final res = await MomentProvider.fetchMomentList( momentData.value?.data?.last.createdAt); if (res != null) { final data = res.data ?? []; @@ -70,7 +70,7 @@ class MomentController extends GetxController { // 点赞 Future likeMoment(MomentItemModel item) async { - final result = await MomentService.likeMoment(item.dynamicId!); + final result = await MomentProvider.likeMoment(item.dynamicId!); if (result != null) { if (item.isLike != result && result && item.likerCount != null) { item.likerCount = item.likerCount! + 1; @@ -84,7 +84,7 @@ class MomentController extends GetxController { // 删除动态 Future delMoment(MomentItemModel item) async { - final result = await MomentService.delMoment(item.dynamicId!); + final result = await MomentProvider.delMoment(item.dynamicId!); if (result == true) { final moment = momentData.value?.data?.indexWhere( (e) => e.dynamicId == item.dynamicId, @@ -101,7 +101,7 @@ class MomentController extends GetxController { int dynamicId, [ Comment? comment, ]) async { - final result = await MomentService.delComment( + final result = await MomentProvider.delComment( dynamicId, comment?.id, ); @@ -123,7 +123,7 @@ class MomentController extends GetxController { String content, [ Comment? comment, ]) async { - final result = await MomentService.replyComment( + final result = await MomentProvider.replyComment( dynamicId, content, comment?.id, diff --git a/lib/controllers/publish_controller.dart b/lib/controllers/publish_controller.dart index e732c86..02a1cb8 100644 --- a/lib/controllers/publish_controller.dart +++ b/lib/controllers/publish_controller.dart @@ -1,7 +1,7 @@ import 'package:chat/controllers/moment_controller.dart'; import 'package:chat/models/upload_model.dart'; import 'package:chat/routes/moments_routes.dart'; -import 'package:chat/services/moment_service.dart'; +import 'package:chat/providers/moment_provider.dart'; import 'package:chat/utils/ui_tools.dart'; import 'package:chat/views/moments/publish/widgets/delete_dialog.dart'; import 'package:flutter/material.dart'; @@ -46,7 +46,7 @@ class PublishController extends GetxController { EasyLoading.show(status: '上传中', maskType: EasyLoadingMaskType.black); final result = await uploadAllFile(); if (!result) return; - final res = await MomentService.publishMoment( + final res = await MomentProvider.publishMoment( description: publishContent.value, pictures: uploadedFileList.map((e) => e.item2!.url).toList(), ); @@ -66,7 +66,7 @@ class PublishController extends GetxController { (e) => (e.item1 == file.hashCode && e.item2?.url != null), ); if (!exists) { - final res = await MomentService.uploadFile((await file.file)!.path); + final res = await MomentProvider.uploadFile((await file.file)!.path); if (res == null) throw Exception('上传失败'); for (var index = 0; index < uploadedFileList.length; index++) { final uploaded = uploadedFileList[index]; diff --git a/lib/models/user_info_model.dart b/lib/models/user_info_model.dart index 98c4c27..dc7aa71 100644 --- a/lib/models/user_info_model.dart +++ b/lib/models/user_info_model.dart @@ -20,4 +20,12 @@ class UserInfoModel { avatar: json['avatar'], address: json['address'], ); + + factory UserInfoModel.empty() => UserInfoModel( + userId: 0, + username: '', + nickname: '', + avatar: '', + address: '', + ); } diff --git a/lib/services/moment_service.dart b/lib/providers/moment_provider.dart similarity index 98% rename from lib/services/moment_service.dart rename to lib/providers/moment_provider.dart index c9c33ba..99f4187 100644 --- a/lib/services/moment_service.dart +++ b/lib/providers/moment_provider.dart @@ -3,9 +3,7 @@ import 'package:chat/models/upload_model.dart'; import 'package:chat/utils/request/http.dart'; import 'package:chat/utils/ui_tools.dart'; -class MomentService { - MomentService._(); - +class MomentProvider { /// 获取“发现”列表数据 /// /// [createAt] 最后一列的create_at diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index 034137f..7e25e1a 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -1,8 +1,8 @@ -import 'package:chat/views/conversation/index_page.dart'; import 'package:chat/views/home/index_page.dart'; import 'package:chat/views/public/app_page.dart'; import 'package:chat/views/public/scan_page.dart'; import 'package:chat/views/public/transit_page.dart'; +import 'package:chat/views/search/index_page.dart'; import 'package:get/get.dart'; /// 这里是为了定义别名路由的名称, @@ -34,7 +34,7 @@ abstract class AppRoutes { ), GetPage( name: AppRoutes.search, - page: () => const ConversationPage(), + page: () => const SearchPage(), ), ], ); diff --git a/lib/routes/user_routes.dart b/lib/routes/user_routes.dart index 15823f8..21d6603 100644 --- a/lib/routes/user_routes.dart +++ b/lib/routes/user_routes.dart @@ -1,12 +1,15 @@ import 'package:chat/middleware/auth_middleware.dart'; import 'package:chat/views/contact/index/index_page.dart'; import 'package:chat/views/user/qr_code/index_page.dart'; +import 'package:chat/views/user/setting/index_page.dart'; import 'package:get/get.dart'; abstract class UserRoutes { /// 身份验证页面 static const String index = '/user'; static const String qrCode = '/user/qrCode'; + static const String setting = '/user/setting'; + static const String share = '/user/share'; static GetPage router = GetPage( name: UserRoutes.index, @@ -19,6 +22,10 @@ abstract class UserRoutes { name: '/qrCode', page: () => const UserQrCodePage(), ), + GetPage( + name: '/setting', + page: () => const UserSettingPage(), + ), ], ); } diff --git a/lib/services/auth_service.dart b/lib/services/auth_service.dart index ee3e709..098776a 100644 --- a/lib/services/auth_service.dart +++ b/lib/services/auth_service.dart @@ -1,3 +1,4 @@ +import 'package:chat/models/user_info_model.dart'; import 'package:chat/routes/auth_routes.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; @@ -19,10 +20,10 @@ class AuthService extends GetxService { late String userSig = ''; /// 获取存储的token,这个可以做到持久化存储 - String get _userSig => - _box.read('userSig') ?? - 'eJwtzEELgjAYxvHvsnPIu7VNJ3ToIIKsIAp2ljbrRYylJs3ou2fq8fk98P*Qiz5Hg2tJSlgEZDNvtO7RY4UzixU7W5feoyUp5QAxVVzR5XFvj62bXAjBAGDRHpu-SSnZlseKrxW8TU1p9sV4v3YJoyFrDrV*QYu5yrQ*2cqUzyHkPpixOMbJjnx-EqUv9A__'; - String get _userId => _box.read('userId') ?? '5'; + String get _userSig => _box.read('userSig') ?? ''; + String get _userId => _box.read('userId') ?? ''; + + Rx userInfo = UserInfoModel.empty().obs; @override void onInit() { @@ -44,8 +45,8 @@ class AuthService extends GetxService { } Future login(String address) async { - _box.write('userId', '5'); - userId = '5'; + _box.write('userId', ''); + userId = ''; isLogin.value = true; return true; @@ -58,6 +59,7 @@ class AuthService extends GetxService { _box.remove('userId'); userSig = ''; userId = ''; + userInfo.value = UserInfoModel.empty(); isLogin.value = false; Get.offAllNamed(AuthRoutes.index); } diff --git a/lib/services/tim_service.dart b/lib/services/tim_service.dart index ff34dbf..2babf3f 100644 --- a/lib/services/tim_service.dart +++ b/lib/services/tim_service.dart @@ -42,7 +42,7 @@ class TimService extends GetxService { return TencentImSDKPlugin.v2TIMManager; } - int sdkAppID = 1400719491; + int sdkAppID = 1400673817; String get _userSig => AuthService.to.userSig; diff --git a/lib/views/search/index_page.dart b/lib/views/search/index_page.dart new file mode 100644 index 0000000..af29cc3 --- /dev/null +++ b/lib/views/search/index_page.dart @@ -0,0 +1,57 @@ +import 'package:chat/configs/app_colors.dart'; +import 'package:flutter/material.dart'; + +class SearchPage extends StatefulWidget { + const SearchPage({Key? key}) : super(key: key); + + @override + State createState() => _SearchPageState(); +} + +class _SearchPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.white, + appBar: AppBar( + title: Container( + constraints: const BoxConstraints( + maxHeight: 32, + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(32), + child: TextField( + onChanged: (e) async {}, + autofocus: true, + decoration: const InputDecoration( + hintText: '请输入搜索内容', + hintStyle: TextStyle( + fontSize: 14, + color: AppColors.unactive, + ), + border: InputBorder.none, + focusedBorder: InputBorder.none, + fillColor: AppColors.white, + filled: true, + contentPadding: EdgeInsets.only( + bottom: 14, + left: 16, + ), + ), + cursorColor: AppColors.primary, + ), + ), + ), + actions: [ + IconButton( + icon: const Icon( + Icons.search, + color: AppColors.black, + ), + onPressed: () {}, + ), + ], + ), + ); + } +} diff --git a/lib/views/user/index/user_page.dart b/lib/views/user/index/user_page.dart index 95a0828..ea76fb9 100644 --- a/lib/views/user/index/user_page.dart +++ b/lib/views/user/index/user_page.dart @@ -1,4 +1,8 @@ +import 'package:chat/routes/user_routes.dart'; +import 'package:chat/services/auth_service.dart'; +import 'package:chat/widgets/custom_avatar.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; class UserPage extends StatefulWidget { const UserPage({Key? key}) : super(key: key); @@ -10,9 +14,55 @@ class UserPage extends StatefulWidget { class _UserPageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('我的'), + return SafeArea( + child: Scaffold( + body: Column( + children: [ + GetX(builder: (_) { + return Row( + children: [ + CustomAvatar( + _.userInfo.value.avatar, + size: 72, + ), + Column( + children: [ + Text(_.userInfo.value.nickname), + Text('${_.userInfo.value.address}'), + ], + ), + Expanded(child: Container()), + InkWell( + onTap: () { + Get.toNamed(UserRoutes.qrCode); + }, + child: Row( + children: const [ + Icon(Icons.qr_code), + Icon(Icons.arrow_forward_ios), + ], + ), + ), + ], + ); + }), + ListTile( + onTap: () { + Get.toNamed(UserRoutes.share); + }, + title: const Text('分享邀请'), + ), + ListTile( + onTap: () { + Get.toNamed(UserRoutes.setting); + }, + title: const Text('设置中心'), + ), + const ListTile( + title: Text('检查更新'), + ), + ], + ), ), ); } diff --git a/lib/views/user/setting/index_page.dart b/lib/views/user/setting/index_page.dart new file mode 100644 index 0000000..17554e1 --- /dev/null +++ b/lib/views/user/setting/index_page.dart @@ -0,0 +1,30 @@ +import 'package:chat/services/auth_service.dart'; +import 'package:flutter/material.dart'; + +class UserSettingPage extends StatefulWidget { + const UserSettingPage({Key? key}) : super(key: key); + + @override + _UserSettingPageState createState() => _UserSettingPageState(); +} + +class _UserSettingPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('设置中心'), + ), + body: Column( + children: [ + ElevatedButton( + onPressed: () { + AuthService.to.logout(); + }, + child: const Text('退出登录'), + ), + ], + ), + ); + } +} diff --git a/lib/views/user/share/index_page.dart b/lib/views/user/share/index_page.dart new file mode 100644 index 0000000..31038ae --- /dev/null +++ b/lib/views/user/share/index_page.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +class UserSharePage extends StatefulWidget { + const UserSharePage({Key? key}) : super(key: key); + + @override + State createState() => _UserSharePageState(); +} + +class _UserSharePageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('分享邀请'), + ), + body: Container(), + ); + } +}