diff --git a/lib/data/services/db/database_helper.dart b/lib/data/services/db/database_helper.dart index 7f1c6178b..fcefe6bbf 100644 --- a/lib/data/services/db/database_helper.dart +++ b/lib/data/services/db/database_helper.dart @@ -36,7 +36,8 @@ class DatabaseHelper { batch.execute(''' CREATE TABLE IF NOT EXISTS user ( id TEXT PRIMARY KEY, - synctime INTEGER + synctime INTEGER, + privatecloud INTEGER ) '''); // 商务会议助手列表 @@ -109,6 +110,7 @@ class DatabaseHelper { batch.insert('user', { 'id': _userId, 'synctime': 0, + 'privatecloud': 0, }); // 商务会议助手插入默认模版 batch.insert('meetingcategorytemplate', { diff --git a/lib/data/services/db/sqflite_api.dart b/lib/data/services/db/sqflite_api.dart index 7a0c85d65..51c43babe 100644 --- a/lib/data/services/db/sqflite_api.dart +++ b/lib/data/services/db/sqflite_api.dart @@ -5,6 +5,19 @@ import '../../../core/utils/synchrodata.dart'; import 'database_helper.dart'; class SqfliteApi { + // 获取个人信息 + static Future getUser() async { + final db = await DatabaseHelper().database; + List userList = await db.query('user'); + return userList.first; + } + + // 修改个人信息 + static Future editUser(id, Map user) async { + final db = await DatabaseHelper().database; + await db.update('user', user, where: 'id = ?', whereArgs: [id]); + } + // 获取商务会议助手列表 static Future getMeetingList() async { final db = await DatabaseHelper().database; diff --git a/lib/modules/meeting/controllers/meeting_controller.dart b/lib/modules/meeting/controllers/meeting_controller.dart index a865d5362..4f7b41e36 100644 --- a/lib/modules/meeting/controllers/meeting_controller.dart +++ b/lib/modules/meeting/controllers/meeting_controller.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../../data/services/db/sqflite_api.dart'; import '../views/meeting_home_view.dart'; import '../views/meeting_mine_view.dart'; @@ -16,9 +17,16 @@ class MeetingController extends GetxController { RxInt pageIndex = 0.obs; + RxMap user = {}.obs; + @override void onInit() { super.onInit(); pageController = PageController(initialPage: 0); + _getUser(); + } + + void _getUser() async { + user.value = Map.from(await SqfliteApi.getUser()); } } diff --git a/lib/modules/meeting/views/meeting_mine_view.dart b/lib/modules/meeting/views/meeting_mine_view.dart index a5ddeb458..b3609f031 100644 --- a/lib/modules/meeting/views/meeting_mine_view.dart +++ b/lib/modules/meeting/views/meeting_mine_view.dart @@ -4,6 +4,7 @@ import 'package:get/get.dart'; import '../../../routes/app_routes.dart'; import '../../profile/views/unified_avatar.dart'; +import '../controllers/meeting_controller.dart'; import '../controllers/meeting_mine_controller.dart'; import '../utils/meeting_ui_utils.dart'; import 'bottomSheet/statistics_bottom_sheet.dart'; @@ -20,6 +21,7 @@ class MeetingMineView extends StatefulWidget { class _MeetingMineViewState extends State with AutomaticKeepAliveClientMixin { final _controller = Get.put(MeetingMineController()); + final _meetingController = Get.put(MeetingController()); @override bool get wantKeepAlive => true; @@ -71,13 +73,17 @@ class _MeetingMineViewState extends State ), ]), _box([ - _item( - Icons.cloud_upload_outlined, - 'Voitrans PRIVATE CLOUD', - description: '开启', - onTap: () { - Get.to(() => const MeetingCloudView()); - }, + Obx( + () => _item( + Icons.cloud_upload_outlined, + 'VOITRANS PRIVATE CLOUD', + description: _meetingController.user['privatecloud'] == 1 + ? '开启' + : '关闭', + onTap: () { + Get.to(() => const MeetingCloudView()); + }, + ), ), ]), _box([ @@ -89,7 +95,7 @@ class _MeetingMineViewState extends State ), _item( Icons.settings_remote_outlined, - '我的Voitrans设备', + '我的VOITRANS设备', onTap: () {}, ), ]), @@ -103,7 +109,7 @@ class _MeetingMineViewState extends State ), _item( Icons.info_outline_rounded, - '关于Voitrans', + '关于VOITRANS', description: 'v1.0.0', onTap: () {}, ), diff --git a/lib/modules/meeting/views/mine/meeting_cloud_view.dart b/lib/modules/meeting/views/mine/meeting_cloud_view.dart index 1e0892aba..7f9e0d41f 100644 --- a/lib/modules/meeting/views/mine/meeting_cloud_view.dart +++ b/lib/modules/meeting/views/mine/meeting_cloud_view.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import '../../../../data/services/db/sqflite_api.dart'; +import '../../controllers/meeting_controller.dart'; import '../../utils/meeting_ui_utils.dart'; class MeetingCloudView extends StatefulWidget { @@ -12,21 +14,41 @@ class MeetingCloudView extends StatefulWidget { } class _MeetingCloudViewState extends State { + final _controller = Get.put(MeetingController()); + + bool _isSync = false; + + @override + void initState() { + super.initState(); + _isSync = _controller.user['privatecloud'] == 1; + } + @override Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; - return Scaffold( - backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), - appBar: _buildAppBar(isDarkMode), - body: _buildBody(isDarkMode), + return PopScope( + onPopInvokedWithResult: (didPop, result) { + int privatecloud = _isSync ? 1 : 0; + if (privatecloud != _controller.user['privatecloud']) { + _controller.user['privatecloud'] = privatecloud; + SqfliteApi.editUser(_controller.user['id'], + Map.from(_controller.user)); + } + }, + child: Scaffold( + backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), + appBar: _buildAppBar(isDarkMode), + body: _buildBody(isDarkMode), + ), ); } // 构建应用栏 PreferredSizeWidget _buildAppBar(bool isDarkMode) { return AppBar( - backgroundColor: isDarkMode ? Colors.black : Colors.white, + backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), surfaceTintColor: Colors.transparent, elevation: 0.5, leading: IconButton( @@ -50,6 +72,88 @@ class _MeetingCloudViewState extends State { } Widget _buildBody(bool isDarkMode) { - return Container(); + return Column( + children: [ + Container( + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 20.w), + margin: EdgeInsets.symmetric(horizontal: 12.w, vertical: 15.w), + decoration: BoxDecoration( + color: MeetingUIUtils.getCardColor(isDarkMode), + borderRadius: BorderRadius.circular(12.w), + boxShadow: MeetingUIUtils.getCardShadow(isDarkMode), + ), + child: Column( + children: [ + Container( + width: 60.w, + height: 60.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12.w), + border: Border.all( + color: Colors.grey, + ), + ), + child: Icon( + Icons.phone_android, + size: 40.w, + ), + ), + Padding( + padding: EdgeInsets.only(top: 20.w, bottom: 10.w), + child: Text( + '同步到云端', + style: TextStyle( + color: isDarkMode ? Colors.white : Colors.black87, + fontSize: 18.sp, + fontWeight: FontWeight.bold, + ), + ), + ), + Text( + '自动将你的录音同步到云端,你可以通过任意VOITRANS APP或VOITRANS Web(web.voitrans.com)播放、管理和分享录音。', + textAlign: TextAlign.center, + style: TextStyle( + color: isDarkMode ? Colors.white : Colors.black87, + fontSize: 14.sp, + ), + ), + ], + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 2.w), + margin: EdgeInsets.symmetric(horizontal: 12.w), + decoration: BoxDecoration( + color: MeetingUIUtils.getCardColor(isDarkMode), + borderRadius: BorderRadius.circular(12.w), + boxShadow: MeetingUIUtils.getCardShadow(isDarkMode), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '同步VOITRANS APP', + style: TextStyle( + color: isDarkMode ? Colors.white : Colors.black87, + fontSize: 16.sp, + ), + ), + Transform.scale( + scale: 0.9, + alignment: Alignment.centerRight, + child: Switch( + value: _isSync, + onChanged: (bool value) { + setState(() { + _isSync = value; + }); + }, + ), + ), + ], + ), + ), + ], + ); } }