页面逻辑

This commit is contained in:
2022-10-20 16:08:27 +08:00
parent 8ad451d4d8
commit 0a81762ba1
12 changed files with 197 additions and 25 deletions

View File

@@ -1,6 +1,6 @@
import 'package:chat/models/moment/moment_model.dart'; import 'package:chat/models/moment/moment_model.dart';
import 'package:chat/routes/moments_routes.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/utils/ui_tools.dart';
import 'package:chat/views/moments/index/widgets/quick_reply_bar.dart'; import 'package:chat/views/moments/index/widgets/quick_reply_bar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -43,7 +43,7 @@ class MomentController extends GetxController {
} }
Future<void> refreshList() async { Future<void> refreshList() async {
final res = await MomentService.fetchMomentList(); final res = await MomentProvider.fetchMomentList();
if (res != null) { if (res != null) {
momentData.value = res; momentData.value = res;
} }
@@ -51,7 +51,7 @@ class MomentController extends GetxController {
} }
Future<void> loadMoreList() async { Future<void> loadMoreList() async {
final res = await MomentService.fetchMomentList( final res = await MomentProvider.fetchMomentList(
momentData.value?.data?.last.createdAt); momentData.value?.data?.last.createdAt);
if (res != null) { if (res != null) {
final data = res.data ?? []; final data = res.data ?? [];
@@ -70,7 +70,7 @@ class MomentController extends GetxController {
// 点赞 // 点赞
Future<void> likeMoment(MomentItemModel item) async { Future<void> likeMoment(MomentItemModel item) async {
final result = await MomentService.likeMoment(item.dynamicId!); final result = await MomentProvider.likeMoment(item.dynamicId!);
if (result != null) { if (result != null) {
if (item.isLike != result && result && item.likerCount != null) { if (item.isLike != result && result && item.likerCount != null) {
item.likerCount = item.likerCount! + 1; item.likerCount = item.likerCount! + 1;
@@ -84,7 +84,7 @@ class MomentController extends GetxController {
// 删除动态 // 删除动态
Future<void> delMoment(MomentItemModel item) async { Future<void> delMoment(MomentItemModel item) async {
final result = await MomentService.delMoment(item.dynamicId!); final result = await MomentProvider.delMoment(item.dynamicId!);
if (result == true) { if (result == true) {
final moment = momentData.value?.data?.indexWhere( final moment = momentData.value?.data?.indexWhere(
(e) => e.dynamicId == item.dynamicId, (e) => e.dynamicId == item.dynamicId,
@@ -101,7 +101,7 @@ class MomentController extends GetxController {
int dynamicId, [ int dynamicId, [
Comment? comment, Comment? comment,
]) async { ]) async {
final result = await MomentService.delComment( final result = await MomentProvider.delComment(
dynamicId, dynamicId,
comment?.id, comment?.id,
); );
@@ -123,7 +123,7 @@ class MomentController extends GetxController {
String content, [ String content, [
Comment? comment, Comment? comment,
]) async { ]) async {
final result = await MomentService.replyComment( final result = await MomentProvider.replyComment(
dynamicId, dynamicId,
content, content,
comment?.id, comment?.id,

View File

@@ -1,7 +1,7 @@
import 'package:chat/controllers/moment_controller.dart'; import 'package:chat/controllers/moment_controller.dart';
import 'package:chat/models/upload_model.dart'; import 'package:chat/models/upload_model.dart';
import 'package:chat/routes/moments_routes.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/utils/ui_tools.dart';
import 'package:chat/views/moments/publish/widgets/delete_dialog.dart'; import 'package:chat/views/moments/publish/widgets/delete_dialog.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -46,7 +46,7 @@ class PublishController extends GetxController {
EasyLoading.show(status: '上传中', maskType: EasyLoadingMaskType.black); EasyLoading.show(status: '上传中', maskType: EasyLoadingMaskType.black);
final result = await uploadAllFile(); final result = await uploadAllFile();
if (!result) return; if (!result) return;
final res = await MomentService.publishMoment( final res = await MomentProvider.publishMoment(
description: publishContent.value, description: publishContent.value,
pictures: uploadedFileList.map((e) => e.item2!.url).toList(), 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), (e) => (e.item1 == file.hashCode && e.item2?.url != null),
); );
if (!exists) { 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('上传失败'); if (res == null) throw Exception('上传失败');
for (var index = 0; index < uploadedFileList.length; index++) { for (var index = 0; index < uploadedFileList.length; index++) {
final uploaded = uploadedFileList[index]; final uploaded = uploadedFileList[index];

View File

@@ -20,4 +20,12 @@ class UserInfoModel {
avatar: json['avatar'], avatar: json['avatar'],
address: json['address'], address: json['address'],
); );
factory UserInfoModel.empty() => UserInfoModel(
userId: 0,
username: '',
nickname: '',
avatar: '',
address: '',
);
} }

View File

@@ -3,9 +3,7 @@ import 'package:chat/models/upload_model.dart';
import 'package:chat/utils/request/http.dart'; import 'package:chat/utils/request/http.dart';
import 'package:chat/utils/ui_tools.dart'; import 'package:chat/utils/ui_tools.dart';
class MomentService { class MomentProvider {
MomentService._();
/// ///
/// ///
/// [createAt] create_at /// [createAt] create_at

View File

@@ -1,8 +1,8 @@
import 'package:chat/views/conversation/index_page.dart';
import 'package:chat/views/home/index_page.dart'; import 'package:chat/views/home/index_page.dart';
import 'package:chat/views/public/app_page.dart'; import 'package:chat/views/public/app_page.dart';
import 'package:chat/views/public/scan_page.dart'; import 'package:chat/views/public/scan_page.dart';
import 'package:chat/views/public/transit_page.dart'; import 'package:chat/views/public/transit_page.dart';
import 'package:chat/views/search/index_page.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
/// 这里是为了定义别名路由的名称, /// 这里是为了定义别名路由的名称,
@@ -34,7 +34,7 @@ abstract class AppRoutes {
), ),
GetPage( GetPage(
name: AppRoutes.search, name: AppRoutes.search,
page: () => const ConversationPage(), page: () => const SearchPage(),
), ),
], ],
); );

View File

@@ -1,12 +1,15 @@
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/qr_code/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'; import 'package:get/get.dart';
abstract class UserRoutes { abstract class UserRoutes {
/// 身份验证页面 /// 身份验证页面
static const String index = '/user'; static const String index = '/user';
static const String qrCode = '/user/qrCode'; static const String qrCode = '/user/qrCode';
static const String setting = '/user/setting';
static const String share = '/user/share';
static GetPage router = GetPage( static GetPage router = GetPage(
name: UserRoutes.index, name: UserRoutes.index,
@@ -19,6 +22,10 @@ abstract class UserRoutes {
name: '/qrCode', name: '/qrCode',
page: () => const UserQrCodePage(), page: () => const UserQrCodePage(),
), ),
GetPage(
name: '/setting',
page: () => const UserSettingPage(),
),
], ],
); );
} }

View File

@@ -1,3 +1,4 @@
import 'package:chat/models/user_info_model.dart';
import 'package:chat/routes/auth_routes.dart'; import 'package:chat/routes/auth_routes.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';
@@ -19,10 +20,10 @@ class AuthService extends GetxService {
late String userSig = ''; late String userSig = '';
/// 获取存储的token这个可以做到持久化存储 /// 获取存储的token这个可以做到持久化存储
String get _userSig => String get _userSig => _box.read('userSig') ?? '';
_box.read('userSig') ?? String get _userId => _box.read('userId') ?? '';
'eJwtzEELgjAYxvHvsnPIu7VNJ3ToIIKsIAp2ljbrRYylJs3ou2fq8fk98P*Qiz5Hg2tJSlgEZDNvtO7RY4UzixU7W5feoyUp5QAxVVzR5XFvj62bXAjBAGDRHpu-SSnZlseKrxW8TU1p9sV4v3YJoyFrDrV*QYu5yrQ*2cqUzyHkPpixOMbJjnx-EqUv9A__';
String get _userId => _box.read('userId') ?? '5'; Rx<UserInfoModel> userInfo = UserInfoModel.empty().obs;
@override @override
void onInit() { void onInit() {
@@ -44,8 +45,8 @@ class AuthService extends GetxService {
} }
Future<bool> login(String address) async { Future<bool> login(String address) async {
_box.write('userId', '5'); _box.write('userId', '');
userId = '5'; userId = '';
isLogin.value = true; isLogin.value = true;
return true; return true;
@@ -58,6 +59,7 @@ class AuthService extends GetxService {
_box.remove('userId'); _box.remove('userId');
userSig = ''; userSig = '';
userId = ''; userId = '';
userInfo.value = UserInfoModel.empty();
isLogin.value = false; isLogin.value = false;
Get.offAllNamed(AuthRoutes.index); Get.offAllNamed(AuthRoutes.index);
} }

View File

@@ -42,7 +42,7 @@ class TimService extends GetxService {
return TencentImSDKPlugin.v2TIMManager; return TencentImSDKPlugin.v2TIMManager;
} }
int sdkAppID = 1400719491; int sdkAppID = 1400673817;
String get _userSig => AuthService.to.userSig; String get _userSig => AuthService.to.userSig;

View File

@@ -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<SearchPage> createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage> {
@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: <Widget>[
IconButton(
icon: const Icon(
Icons.search,
color: AppColors.black,
),
onPressed: () {},
),
],
),
);
}
}

View File

@@ -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:flutter/material.dart';
import 'package:get/get.dart';
class UserPage extends StatefulWidget { class UserPage extends StatefulWidget {
const UserPage({Key? key}) : super(key: key); const UserPage({Key? key}) : super(key: key);
@@ -10,9 +14,55 @@ class UserPage extends StatefulWidget {
class _UserPageState extends State<UserPage> { class _UserPageState extends State<UserPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return SafeArea(
appBar: AppBar( child: Scaffold(
title: const Text('我的'), body: Column(
children: [
GetX<AuthService>(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('检查更新'),
),
],
),
), ),
); );
} }

View File

@@ -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<UserSettingPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('设置中心'),
),
body: Column(
children: [
ElevatedButton(
onPressed: () {
AuthService.to.logout();
},
child: const Text('退出登录'),
),
],
),
);
}
}

View File

@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
class UserSharePage extends StatefulWidget {
const UserSharePage({Key? key}) : super(key: key);
@override
State<UserSharePage> createState() => _UserSharePageState();
}
class _UserSharePageState extends State<UserSharePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('分享邀请'),
),
body: Container(),
);
}
}