页面逻辑
This commit is contained in:
@@ -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<void> 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<void> 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<void> 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<void> 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,
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -20,4 +20,12 @@ class UserInfoModel {
|
||||
avatar: json['avatar'],
|
||||
address: json['address'],
|
||||
);
|
||||
|
||||
factory UserInfoModel.empty() => UserInfoModel(
|
||||
userId: 0,
|
||||
username: '',
|
||||
nickname: '',
|
||||
avatar: '',
|
||||
address: '',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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(),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -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(),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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<UserInfoModel> userInfo = UserInfoModel.empty().obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
@@ -44,8 +45,8 @@ class AuthService extends GetxService {
|
||||
}
|
||||
|
||||
Future<bool> 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);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ class TimService extends GetxService {
|
||||
return TencentImSDKPlugin.v2TIMManager;
|
||||
}
|
||||
|
||||
int sdkAppID = 1400719491;
|
||||
int sdkAppID = 1400673817;
|
||||
|
||||
String get _userSig => AuthService.to.userSig;
|
||||
|
||||
|
||||
57
lib/views/search/index_page.dart
Normal file
57
lib/views/search/index_page.dart
Normal 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: () {},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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<UserPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('我的'),
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
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('检查更新'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
30
lib/views/user/setting/index_page.dart
Normal file
30
lib/views/user/setting/index_page.dart
Normal 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('退出登录'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
20
lib/views/user/share/index_page.dart
Normal file
20
lib/views/user/share/index_page.dart
Normal 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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user