From ff612bcc56f72554f5ef75d0086a785e4125670e Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 1 Nov 2022 11:06:51 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9A=90=E7=A7=81=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/models/user_info_model.dart | 5 +++ lib/providers/user_provider.dart | 13 +++++-- lib/services/auth_service.dart | 11 ++++++ .../user/setting/privacy/index_page.dart | 34 +++++++++++++++---- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/lib/models/user_info_model.dart b/lib/models/user_info_model.dart index d416c3c..dc66e34 100644 --- a/lib/models/user_info_model.dart +++ b/lib/models/user_info_model.dart @@ -2,6 +2,7 @@ class UserInfoModel { UserInfoModel({ required this.userId, required this.username, + required this.privacy, required this.nickname, required this.avatar, required this.address, @@ -9,6 +10,7 @@ class UserInfoModel { String userId; String username; + bool privacy; String? nickname; String? avatar; String? address; @@ -16,6 +18,7 @@ class UserInfoModel { factory UserInfoModel.fromJson(Map json) => UserInfoModel( userId: json['user_id'].toString(), username: json['username'], + privacy: json['privacy'], nickname: json['nickname'], avatar: json['avatar'], address: json['address'], @@ -24,6 +27,7 @@ class UserInfoModel { factory UserInfoModel.empty() => UserInfoModel( userId: '', username: '', + privacy: true, nickname: '', avatar: '', address: '', @@ -32,6 +36,7 @@ class UserInfoModel { Map toJson() => { "userId": userId, "username": username, + "privacy": privacy, "nickname": nickname, "avatar": avatar, "address": address, diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index 50b0cb6..375be4a 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -49,8 +49,17 @@ class UserProvider { (x) => SearchUserModel.fromJson(x), ), ); - } catch (err) { - UiTools.toast(err.toString()); + } catch (e) { + UiTools.toast(e.toString()); + } + return null; + } + + static Future togglePrivacy() async { + try { + return await Http.put('user/privacy'); + } catch (e) { + UiTools.toast(e.toString()); } return null; } diff --git a/lib/services/auth_service.dart b/lib/services/auth_service.dart index 83e3799..8bdde05 100644 --- a/lib/services/auth_service.dart +++ b/lib/services/auth_service.dart @@ -1,5 +1,6 @@ import 'package:chat/models/user_info_model.dart'; import 'package:chat/providers/auth_provider.dart'; +import 'package:chat/providers/user_provider.dart'; import 'package:chat/routes/auth_routes.dart'; import 'package:chat/services/tim/apply_service.dart'; import 'package:chat/services/tim/block_service.dart'; @@ -123,4 +124,14 @@ class AuthService extends GetxService { _box.write('userInfo', userInfo.toJson()); } + + /// 更新隐私状态 + Future togglePrivacy() async { + var res = await UserProvider.togglePrivacy(); + if (res != null) { + userInfo.value.privacy = res; + userInfo.refresh(); + } + _box.write('userInfo', userInfo.toJson()); + } } diff --git a/lib/views/user/setting/privacy/index_page.dart b/lib/views/user/setting/privacy/index_page.dart index 6a7ec3b..010fbee 100644 --- a/lib/views/user/setting/privacy/index_page.dart +++ b/lib/views/user/setting/privacy/index_page.dart @@ -1,20 +1,40 @@ +import 'package:chat/configs/app_colors.dart'; +import 'package:chat/services/auth_service.dart'; +import 'package:chat/views/user/widgets/link_action_item.dart'; import 'package:flutter/material.dart'; +import 'package:get/get_state_manager/get_state_manager.dart'; -class UserSettingPrivacyPage extends StatefulWidget { +class UserSettingPrivacyPage extends StatelessWidget { const UserSettingPrivacyPage({Key? key}) : super(key: key); - @override - _UserSettingPrivacyPageState createState() => _UserSettingPrivacyPageState(); -} - -class _UserSettingPrivacyPageState extends State { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('隐私权限'), ), - body: Container(), + body: Column( + children: [ + const Divider( + height: 0, + color: AppColors.border, + ), + GetX( + builder: (_) { + return LinkActionItem( + title: '允许通过搜索添加我为好友', + trailing: Switch( + value: _.userInfo.value.privacy, + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + onChanged: (e) { + _.togglePrivacy(); + }, + ), + ); + }, + ), + ], + ), ); } }