Просмотр исходного кода

[new]增加侧边栏内容显示

zk 1 год назад
Родитель
Сommit
c41cd2f334

BIN
assets/images/icon_agent_un_check.webp


BIN
assets/images/icon_charge_center_txt.png


BIN
assets/images/icon_complaint_and_report.webp


BIN
assets/images/icon_drawer_check_updates.webp


BIN
assets/images/icon_drawer_privacy_policy.webp


BIN
assets/images/icon_drawer_user_agreement.webp


BIN
assets/images/icon_go_login_arrow.webp


BIN
assets/images/icon_home_no_login.webp


BIN
assets/images/icon_industry_change.webp


BIN
assets/images/icon_temp_management.webp


+ 10 - 0
assets/string/base/string.xml

@@ -14,4 +14,14 @@
     <string name="home_talk_todo1">想找更多待办?查看</string>
     <string name="home_talk_todo2">全部待办</string>
     <string name="home_popup_tips_txt">当前有未完成录音,\n快来处理</string>
+    <string name="main_no_login_charge_tips">去给小听充电</string>
+    <string name="main_login_charge_tips">小听剩余电量:%d</string>
+    <string name="main_go_charge">去充电</string>
+    <string name="main_drawer_template_management">总结模板管理</string>
+    <string name="main_drawer_industry_position_change">行业职位变更</string>
+    <string name="privacy_policy">隐私政策</string>
+    <string name="user_agreement">用户协议</string>
+    <string name="main_drawer_check_updates">检查更新</string>
+    <string name="main_drawer_complaint_and_report">投诉举报</string>
+    <string name="main_drawer_record_number">备案号216545885</string>
 </resources>

+ 0 - 1
lib/module/files/controller.dart

@@ -1,7 +1,6 @@
 import 'package:electronic_assistant/base/base_controller.dart';
 
 class FilesController extends BaseController {
-
   @override
   void onInit() {
     // TODO: implement onInit

+ 5 - 0
lib/module/files/view.dart

@@ -10,6 +10,11 @@ class FilesPage extends BasePage<FilesController> {
   const FilesPage({super.key});
 
   @override
+  bool immersive() {
+    return true;
+  }
+
+  @override
   Widget buildBody(BuildContext context) {
     return Scaffold(
       backgroundColor: const Color.fromRGBO(246, 245, 248, 1),

+ 11 - 1
lib/module/home/controller.dart

@@ -1,4 +1,14 @@
 import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/module/main/controller.dart';
+import 'package:electronic_assistant/resource/string.gen.dart';
 import 'package:get/get.dart';
 
-class HomePageController extends BaseController {}
+class HomePageController extends BaseController {
+  void goTalkRecordPage() {
+    Get.find<MainController>().updateIndexByPageName(StringName.mainTabFile);
+  }
+
+  void showLoginDrawer() {
+    Get.find<MainController>().openDrawer();
+  }
+}

+ 7 - 2
lib/module/home/view.dart

@@ -55,6 +55,11 @@ class HomePage extends BasePage<HomePageController> {
     );
   }
 
+  @override
+  bool immersive() {
+    return true;
+  }
+
   SliverToBoxAdapter buildSeeMoreView() {
     return SliverToBoxAdapter(
       child: Container(
@@ -100,7 +105,7 @@ class HomePage extends BasePage<HomePageController> {
         children: [
           SizedBox(height: 7.w),
           buildTitle(StringName.homeTalkRecord.tr, () {
-            ToastUtil.showToast('谈话记录 查看全部');
+            controller.goTalkRecordPage();
           }),
           SizedBox(height: 12.w)
         ],
@@ -146,7 +151,7 @@ class HomePage extends BasePage<HomePageController> {
   GestureDetector buildGoLogin() {
     return GestureDetector(
       onTap: () {
-        ToastUtil.showToast('GoLogin');
+        controller.showLoginDrawer();
       },
       child: Row(
         children: [

+ 23 - 0
lib/module/main/controller.dart

@@ -4,11 +4,15 @@ import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/resource/assets.gen.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
+import 'package:electronic_assistant/utils/app_info_util.dart';
 import 'package:electronic_assistant/utils/expand.dart';
 import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 
 class MainController extends BaseController {
+  final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
+
   final List<TabBean> tabBeans = [
     TabBean(
         StringName.mainTabHome,
@@ -28,6 +32,8 @@ class MainController extends BaseController {
 
   int get currentIndex => _currentIndex.value;
 
+  String get versionName => "v${appInfoUtil.appVersionName}";
+
   void changeIndex(int index) {
     _currentIndex.value = index;
   }
@@ -35,6 +41,23 @@ class MainController extends BaseController {
   void updateIndex(int index) {
     _currentIndex.value = index;
   }
+
+  void updateIndexByPageName(String pageName) {
+    for (var value in tabBeans) {
+      if (value.title == pageName) {
+        _currentIndex.value = tabBeans.indexOf(value);
+        break;
+      }
+    }
+  }
+
+  void openDrawer() {
+    scaffoldKey.currentState?.openDrawer();
+  }
+
+  void closeDrawer() {
+    scaffoldKey.currentState?.closeDrawer();
+  }
 }
 
 class TabBean {

+ 189 - 0
lib/module/main/drawer_view.dart

@@ -0,0 +1,189 @@
+import 'package:electronic_assistant/module/main/controller.dart';
+import 'package:electronic_assistant/utils/app_info_util.dart';
+import 'package:electronic_assistant/utils/expand.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+
+import '../../resource/assets.gen.dart';
+import '../../resource/colors.gen.dart';
+import '../../resource/string.gen.dart';
+
+Widget buildDrawerContent(MainController controller) {
+  return SafeArea(
+    child: Padding(
+      padding: EdgeInsets.symmetric(horizontal: 16.w),
+      child: Column(
+        children: [
+          SizedBox(height: 12.h),
+          Row(
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              SizedBox(
+                  width: 44.w,
+                  height: 44.w,
+                  child: Assets.images.iconHomeNoLogin.image()),
+              SizedBox(width: 10.w),
+              Text(StringName.homeGoLogin.tr,
+                  style: TextStyle(
+                      fontSize: 20.sp,
+                      color: ColorName.primaryTextColor,
+                      fontWeight: FontWeight.bold)),
+              SizedBox(width: 8.w),
+              SizedBox(
+                  height: 20.w, child: Assets.images.iconGoLoginArrow.image()),
+            ],
+          ),
+          SizedBox(height: 12.h),
+          Container(
+            height: 72.w,
+            decoration: BoxDecoration(
+              borderRadius: BorderRadius.circular(12.w),
+              border: Border.all(color: ColorName.white20, width: 2.w),
+              gradient: LinearGradient(
+                colors: ['#5B618D'.toColor(), '#283B58'.toColor()],
+                begin: Alignment.centerLeft,
+                end: Alignment.centerRight,
+                transform: const GradientRotation(-1.64061),
+                stops: const [0, 1.0],
+              ),
+            ),
+            child: Row(
+              children: [
+                SizedBox(width: 16.w),
+                IntrinsicHeight(
+                  child: Column(
+                    children: [
+                      SizedBox(
+                          height: 18.h,
+                          child: Assets.images.iconChargeCenterTxt.image()),
+                      SizedBox(height: 4.h),
+                      Text(StringName.mainNoLoginChargeTips.tr,
+                          style: TextStyle(
+                              fontSize: 12.sp, color: ColorName.white))
+                    ],
+                  ),
+                ),
+                const Spacer(),
+                DecoratedBox(
+                  decoration: BoxDecoration(
+                    color: Colors.white,
+                    borderRadius: BorderRadius.circular(12.w),
+                  ),
+                  child: Padding(
+                    padding:
+                        const EdgeInsets.symmetric(vertical: 4, horizontal: 11)
+                            .w,
+                    child: Text(
+                      StringName.mainGoCharge.tr,
+                      style: TextStyle(
+                          fontSize: 14.sp,
+                          color: '#374668'.toColor(),
+                          fontWeight: FontWeight.bold),
+                    ),
+                  ),
+                ),
+                SizedBox(width: 18.w),
+              ],
+            ),
+          ),
+          SizedBox(height: 12.h),
+          Container(
+            padding: EdgeInsets.symmetric(vertical: 8.h),
+            decoration: BoxDecoration(
+              color: ColorName.white,
+              borderRadius: BorderRadius.circular(12.w),
+            ),
+            child: Column(
+              children: [
+                buildOperationItem(
+                  Assets.images.iconTempManagement.image(),
+                  StringName.mainDrawerTemplateManagement.tr,
+                  () {},
+                ),
+                buildOperationItem(
+                  Assets.images.iconIndustryChange.image(),
+                  StringName.mainDrawerIndustryPositionChange.tr,
+                  () {},
+                )
+              ],
+            ),
+          ),
+          SizedBox(height: 8.h),
+          Container(
+            padding: EdgeInsets.symmetric(vertical: 8.h),
+            decoration: BoxDecoration(
+              color: ColorName.white,
+              borderRadius: BorderRadius.circular(12.w),
+            ),
+            child: Column(
+              children: [
+                buildOperationItem(
+                  Assets.images.iconDrawerPrivacyPolicy.image(),
+                  StringName.privacyPolicy.tr,
+                  () {},
+                ),
+                buildOperationItem(
+                  Assets.images.iconDrawerUserAgreement.image(),
+                  StringName.userAgreement.tr,
+                  () {},
+                ),
+                buildOperationItem(
+                  Assets.images.iconDrawerCheckUpdates.image(),
+                  StringName.mainDrawerCheckUpdates.tr,
+                  () {},
+                  rightView: Text(
+                    controller.versionName,
+                    style: TextStyle(
+                        fontSize: 12.sp, color: ColorName.tertiaryTextColor),
+                  ),
+                ),
+                buildOperationItem(
+                  Assets.images.iconComplaintAndReport.image(),
+                  StringName.mainDrawerComplaintAndReport.tr,
+                  () {},
+                )
+              ],
+            ),
+          ),
+          const Spacer(),
+          Padding(
+            padding: const EdgeInsets.only(bottom: 22).h,
+            child: Text(StringName.mainDrawerRecordNumber.tr,
+                style: TextStyle(
+                    fontSize: 12.sp, color: ColorName.tertiaryTextColor)),
+          )
+        ],
+      ),
+    ),
+  );
+}
+
+Widget buildOperationItem(Image icon, String title, Function onTap,
+    {Widget? rightView = const SizedBox.shrink()}) {
+  return GestureDetector(
+    onTap: () {
+      onTap();
+    },
+    child: Padding(
+      padding: const EdgeInsets.symmetric(vertical: 12).h,
+      child: Row(
+        crossAxisAlignment: CrossAxisAlignment.center,
+        children: [
+          SizedBox(width: 16.w),
+          SizedBox(width: 20.w, height: 20.w, child: icon),
+          SizedBox(width: 8.w),
+          Expanded(
+            child: Text(title,
+                style: TextStyle(
+                    fontSize: 14.sp, color: ColorName.primaryTextColor)),
+          ),
+          const Spacer(),
+          rightView ?? const SizedBox.shrink(),
+          SizedBox(width: 16.w),
+        ],
+      ),
+    ),
+  );
+}

+ 14 - 11
lib/module/main/view.dart

@@ -3,12 +3,16 @@ import 'package:electronic_assistant/main.dart';
 import 'package:electronic_assistant/module/main/controller.dart';
 import 'package:electronic_assistant/resource/assets.gen.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
+import 'package:electronic_assistant/resource/string.gen.dart';
+import 'package:electronic_assistant/utils/expand.dart';
+import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 
 import '../files/view.dart';
 import '../home/view.dart';
+import 'drawer_view.dart';
 
 class MainTabPage extends BasePage<MainController> {
   MainTabPage({super.key});
@@ -21,6 +25,7 @@ class MainTabPage extends BasePage<MainController> {
   @override
   Widget buildBody(BuildContext context) {
     return Scaffold(
+      key: controller.scaffoldKey,
       body: Obx(() {
         return pages[controller.currentIndex];
       }),
@@ -28,22 +33,20 @@ class MainTabPage extends BasePage<MainController> {
       floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
       bottomNavigationBar: buildBottomAppBar(),
       drawer: Drawer(
-        child: Center(
-          child: Column(
-            mainAxisAlignment: MainAxisAlignment.center,
-            children: <Widget>[
-              const Text('This is the Drawer'),
-              ElevatedButton(
-                onPressed: () {},
-                child: const Text('Close Drawer'),
-              ),
-            ],
-          ),
+        shape: const RoundedRectangleBorder(
+          borderRadius: BorderRadius.zero,
         ),
+        backgroundColor: "#F6F5F8".toColor(),
+        child: buildDrawerContent(controller),
       ),
     );
   }
 
+  @override
+  bool immersive() {
+    return true;
+  }
+
   Container buildAIChatBtn() {
     return Container(
       width: 68.w,