Browse Source

[new]首页增加背景滚动渐变

zk 1 year ago
parent
commit
571db91f3f
3 changed files with 63 additions and 402 deletions
  1. 0 1
      lib/module/home/agenda/view.dart
  2. 23 12
      lib/module/home/controller.dart
  3. 40 389
      lib/module/home/view.dart

+ 0 - 1
lib/module/home/agenda/view.dart

@@ -9,7 +9,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import 'package:get/get.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
-
 import '../../../data/consts/Constants.dart';
 import '../../../data/consts/Constants.dart';
 import '../../../resource/colors.gen.dart';
 import '../../../resource/colors.gen.dart';
 import '../../../resource/string.gen.dart';
 import '../../../resource/string.gen.dart';

+ 23 - 12
lib/module/home/controller.dart

@@ -2,9 +2,6 @@ import 'dart:io';
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/data/consts/Constants.dart';
 import 'package:electronic_assistant/data/consts/Constants.dart';
 import 'package:electronic_assistant/data/consts/event_report_id.dart';
 import 'package:electronic_assistant/data/consts/event_report_id.dart';
-import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
-import 'package:electronic_assistant/data/repositories/config_repository.dart';
-import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:electronic_assistant/handler/event_handler.dart';
 import 'package:electronic_assistant/handler/event_handler.dart';
 import 'package:electronic_assistant/module/home/talk/view.dart';
 import 'package:electronic_assistant/module/home/talk/view.dart';
 import 'package:electronic_assistant/module/login/view.dart';
 import 'package:electronic_assistant/module/login/view.dart';
@@ -14,15 +11,12 @@ import 'package:electronic_assistant/router/app_pages.dart';
 import 'package:electronic_assistant/utils/file_upload_check_helper.dart';
 import 'package:electronic_assistant/utils/file_upload_check_helper.dart';
 import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/cupertino.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import 'package:get/get.dart';
-import '../../data/api/response/example_info_response.dart';
-import '../../data/bean/agenda.dart';
 import '../../data/repositories/account_repository.dart';
 import '../../data/repositories/account_repository.dart';
 import '../../dialog/guide_dialog.dart';
 import '../../dialog/guide_dialog.dart';
 import '../../resource/colors.gen.dart';
 import '../../resource/colors.gen.dart';
-import '../../utils/error_handler.dart';
 import '../../utils/toast_util.dart';
 import '../../utils/toast_util.dart';
-import '../agenda/detail/view.dart';
 import '../audiopicker/view.dart';
 import '../audiopicker/view.dart';
 import 'agenda/view.dart';
 import 'agenda/view.dart';
 
 
@@ -37,6 +31,16 @@ class HomePageController extends BaseController {
 
 
   GlobalKey headGuideKey = GlobalKey();
   GlobalKey headGuideKey = GlobalKey();
 
 
+  final ScrollController scrollController = ScrollController();
+
+  late VoidCallback scrollCallback;
+
+  final RxDouble _topBgOpacity = RxDouble(0);
+
+  double get topBgOpacity => _topBgOpacity.value;
+
+  final double maxScrollOffset = 100.h;
+
   //tab
   //tab
   final tabList = [
   final tabList = [
     TabBean(StringName.homeTalkRecord.tr, TabType.talk, const HomeTalkView()),
     TabBean(StringName.homeTalkRecord.tr, TabType.talk, const HomeTalkView()),
@@ -48,6 +52,18 @@ class HomePageController extends BaseController {
   void onReady() {
   void onReady() {
     super.onReady();
     super.onReady();
     _checkMainGuide();
     _checkMainGuide();
+    scrollCallback = () {
+      if (scrollController.offset <= maxScrollOffset) {
+        _topBgOpacity.value = scrollController.offset / maxScrollOffset;
+      }
+    };
+    scrollController.addListener(scrollCallback);
+  }
+
+  @override
+  void onClose() {
+    super.onClose();
+    scrollController.removeListener(scrollCallback);
   }
   }
 
 
   void _checkMainGuide() {
   void _checkMainGuide() {
@@ -60,13 +76,10 @@ class HomePageController extends BaseController {
     });
     });
   }
   }
 
 
-
-
   void showLoginDrawer() {
   void showLoginDrawer() {
     mainController.openDrawer();
     mainController.openDrawer();
   }
   }
 
 
-
   void onPickerAudioFile() async {
   void onPickerAudioFile() async {
     EventHandler.report(EventId.event_100030);
     EventHandler.report(EventId.event_100030);
     if (!accountRepository.isLogin.value) {
     if (!accountRepository.isLogin.value) {
@@ -81,7 +94,6 @@ class HomePageController extends BaseController {
     }
     }
   }
   }
 
 
-
   void onRecordClick() {
   void onRecordClick() {
     Get.toNamed(RoutePath.record);
     Get.toNamed(RoutePath.record);
   }
   }
@@ -96,7 +108,6 @@ class HomePageController extends BaseController {
         barrierColor: ColorName.black55,
         barrierColor: ColorName.black55,
         backgroundColor: ColorName.transparent);
         backgroundColor: ColorName.transparent);
   }
   }
-
 }
 }
 
 
 class TabBean {
 class TabBean {

+ 40 - 389
lib/module/home/view.dart

@@ -28,38 +28,45 @@ class HomePage extends BasePage<HomePageController> {
     return Stack(
     return Stack(
       children: [
       children: [
         buildBgBox(),
         buildBgBox(),
-        SafeArea(
-          bottom: false,
-          child: Column(
-            children: [
-              Container(
-                width: 1.sw,
-                padding: const EdgeInsets.all(12).w,
-                child: buildOperationBar(),
-              ),
-              Expanded(
-                child: DefaultTabController(
-                    length: controller.tabList.length,
-                    child: NestedScrollView(
-                        headerSliverBuilder:
-                            (BuildContext context, bool innerBoxIsScrolled) {
-                          return [
-                            SliverToBoxAdapter(child: _buildHeaderView()),
-                            SliverPersistentHeader(
-                                floating: true,
-                                pinned: true,
-                                delegate: CommonSliverHeaderDelegate(
-                                    backgroundColor: '#F6F5F8'.color,
-                                    child: PreferredSize(
-                                        preferredSize:
-                                            const Size(double.infinity, 52),
-                                        child: _buildTabBar()))),
-                          ];
-                        },
-                        body: _buildHomeTabView())),
-              ),
-            ],
-          ),
+        Column(
+          children: [
+            Obx(() {
+              return Container(
+                color: '#EBF0FE'.color.withOpacity(controller.topBgOpacity),
+                child: Column(
+                  children: [
+                    SizedBox(height: MediaQuery.of(context).padding.top),
+                    Container(
+                      padding: const EdgeInsets.all(12).w,
+                      child: buildOperationBar(),
+                    )
+                  ],
+                ),
+              );
+            }),
+            Expanded(
+              child: DefaultTabController(
+                  length: controller.tabList.length,
+                  child: NestedScrollView(
+                      controller: controller.scrollController,
+                      headerSliverBuilder:
+                          (BuildContext context, bool innerBoxIsScrolled) {
+                        return [
+                          SliverToBoxAdapter(child: _buildHeaderView()),
+                          SliverPersistentHeader(
+                              floating: true,
+                              pinned: true,
+                              delegate: CommonSliverHeaderDelegate(
+                                  backgroundColor: '#F6F5F8'.color,
+                                  child: PreferredSize(
+                                      preferredSize:
+                                          const Size(double.infinity, 52),
+                                      child: _buildTabBar()))),
+                        ];
+                      },
+                      body: _buildHomeTabView())),
+            ),
+          ],
         ),
         ),
       ],
       ],
     );
     );
@@ -107,78 +114,6 @@ class HomePage extends BasePage<HomePageController> {
     );
     );
   }
   }
 
 
-  // SliverToBoxAdapter buildSeeMoreView() {
-  //   return SliverToBoxAdapter(
-  //     child: Obx(() {
-  //       return Visibility(
-  //         visible: controller.agendaList.isNotEmpty,
-  //         child: Container(
-  //           alignment: Alignment.center,
-  //           padding: EdgeInsets.only(
-  //               top: 12.w, bottom: 56.w + Constants.bottomBarHeight),
-  //           child: RichText(
-  //             text: TextSpan(
-  //               text: StringName.homeTalkTodo1.tr,
-  //               style: TextStyle(
-  //                   color: ColorName.secondaryTextColor, fontSize: 12.sp),
-  //               children: <TextSpan>[
-  //                 TextSpan(
-  //                     text: StringName.homeTalkTodo2.tr,
-  //                     style: TextStyle(
-  //                         color: ColorName.colorPrimary, fontSize: 12.sp),
-  //                     recognizer: TapGestureRecognizer()
-  //                       ..onTap = () {
-  //                         controller.onGoAgendaList();
-  //                       }),
-  //               ],
-  //             ),
-  //           ),
-  //         ),
-  //       );
-  //     }),
-  //   );
-  // }
-
-  // SliverToBoxAdapter buildTalkTodoTitle() {
-  //   return SliverToBoxAdapter(
-  //       child: Container(
-  //     decoration: BoxDecoration(
-  //       gradient: LinearGradient(
-  //         begin: Alignment.topCenter,
-  //         end: Alignment.bottomCenter,
-  //         colors: ["#FCFBFC".toColor(), "#F6F5F8".toColor()],
-  //       ),
-  //     ),
-  //     child: Column(
-  //       children: [
-  //         SizedBox(height: 12.w),
-  //         buildTitle(StringName.talkSummaryTodoTitle.tr, () {
-  //           controller.onGoAgendaList();
-  //         }),
-  //         SizedBox(height: 12.w)
-  //       ],
-  //     ),
-  //   ));
-  // }
-  //
-  // SliverToBoxAdapter buildTalkRecordTitle() {
-  //   return SliverToBoxAdapter(
-  //     child: Container(
-  //       decoration: BoxDecoration(
-  //         gradient: LinearGradient(
-  //           begin: Alignment.topCenter,
-  //           end: Alignment.bottomCenter,
-  //           colors: [ColorName.white, "#FEFEFE".toColor()],
-  //         ),
-  //       ),
-  //       padding: const EdgeInsets.symmetric(vertical: 12).w,
-  //       child: buildTitle(StringName.homeTalkRecord.tr, () {
-  //         controller.goTalkRecordPage();
-  //       }),
-  //     ),
-  //   );
-  // }
-
   Row buildOperationBar() {
   Row buildOperationBar() {
     return Row(children: [buildGoLogin(), const Spacer(), buildGoStore()]);
     return Row(children: [buildGoLogin(), const Spacer(), buildGoStore()]);
   }
   }
@@ -204,8 +139,6 @@ class HomePage extends BasePage<HomePageController> {
                   fontWeight: FontWeight.bold)),
                   fontWeight: FontWeight.bold)),
         ),
         ),
         onTap: () {
         onTap: () {
-          // accountRepository.logout();
-          // ToastUtil.showToast('GoStore');
           StorePage.start(fromType: StoreFromType.home);
           StorePage.start(fromType: StoreFromType.home);
         });
         });
   }
   }
@@ -263,290 +196,8 @@ class HomePage extends BasePage<HomePageController> {
       ),
       ),
     );
     );
   }
   }
-
-// Widget buildTalkRecord() {
-//   return SizedBox(
-//     width: 1.sw,
-//     child: CustomScrollView(
-//       scrollDirection: Axis.horizontal,
-//       slivers: [
-//         SliverToBoxAdapter(child: SizedBox(width: 12.w)),
-//         Obx(() {
-//           return SliverList.builder(
-//               itemBuilder: _builderTalkItem,
-//               itemCount: controller.talkList.length >= 10
-//                   ? 10
-//                   : controller.talkList.length);
-//         }),
-//       ],
-//     ),
-//   );
-// }
-//
-// Widget _builderTalkItem(BuildContext context, int index) {
-//   return Obx(() {
-//     TalkBean? item = controller.talkList[index];
-//     return _buildTalkView(item, onLongPressStart: (details) {
-//       if (!accountRepository.isLogin.value) {
-//         return;
-//       }
-//       showTalkPopup(details.globalPosition, Alignment.bottomRight,
-//           onRename: () {
-//         showRenameTalkDialog(item);
-//       }, onDelete: () {
-//         showDeleteTalkDialog(item);
-//       });
-//     }, onItemClick: () {
-//       controller.onTalkItemClick(item);
-//     });
-//   });
-// }
-
-// Widget _builderAgendaItem(BuildContext context, int index) {
-//   return Obx(() {
-//     Agenda item = controller.agendaList[index];
-//     return GestureDetector(
-//       onTap: () {
-//         controller.onAgendaItemClick(item);
-//       },
-//       child: taskItemView(
-//         item,
-//         onThinkingClick: () {
-//           ChatPage.startByTalkId(
-//               item.isExample == true
-//                   ? ChatFromType.fromTalkExample
-//                   : ChatFromType.fromAnalysisBtn,
-//               item.talkId,
-//               agenda: item);
-//         },
-//         onCheckClick: () {
-//           controller.agendaComplete(item);
-//         },
-//       ),
-//     );
-//   });
-// }
-
-// SliverToBoxAdapter buildGoRecordView() {
-//   return SliverToBoxAdapter(
-//       child: GestureDetector(
-//     onTap: () => Get.toNamed(RoutePath.record),
-//     child: Container(
-//       margin: EdgeInsets.only(right: 8.w),
-//       decoration: BoxDecoration(
-//         color: Colors.white,
-//         border: Border.all(color: '#EBEBFF'.toColor(), width: 1),
-//         borderRadius: BorderRadius.circular(8.0),
-//       ),
-//       child: SizedBox(
-//         width: 100.w,
-//         height: double.infinity,
-//         child: Stack(
-//           children: [
-//             Positioned(
-//               right: 0,
-//               bottom: 0,
-//               child: SizedBox(
-//                 width: 48.w,
-//                 child: Assets.images.bgHomeQuickAudio.image(),
-//               ),
-//             ),
-//             Positioned.fill(
-//                 child: Align(
-//               alignment: Alignment.center,
-//               child: Column(
-//                 children: [
-//                   SizedBox(height: 20.h),
-//                   SizedBox(
-//                       width: 32.w,
-//                       height: 32.w,
-//                       child: Assets.images.iconAddTalk.image()),
-//                   SizedBox(height: 6.h),
-//                   Text(StringName.homeTalkAudio.tr,
-//                       style: TextStyle(
-//                           fontSize: 14.sp,
-//                           color: ColorName.colorPrimary,
-//                           fontWeight: FontWeight.bold)),
-//                   Builder(builder: (context) {
-//                     controller.todoTargetContext = context;
-//                     return Text(StringName.homeTalkQuickAudio.tr,
-//                         style: TextStyle(
-//                             fontSize: 10.sp,
-//                             color: ColorName.secondaryTextColor));
-//                   })
-//                 ],
-//               ),
-//             )),
-//           ],
-//         ),
-//       ),
-//     ),
-//   ));
-// }
-
-// Widget _buildTalkView(TalkBean item,
-//     {VoidCallback? onItemClick,
-//     GestureLongPressStartCallback? onLongPressStart}) {
-//   return GestureDetector(
-//     onTap: onItemClick,
-//     onLongPressStart: onLongPressStart,
-//     child: Container(
-//         width: 258.w,
-//         margin: EdgeInsets.only(right: 8.w),
-//         decoration: BoxDecoration(
-//           color: Colors.white,
-//           border: Border.all(color: '#F0F0F0'.toColor(), width: 2),
-//           borderRadius: const BorderRadius.only(
-//               topLeft: Radius.circular(12),
-//               topRight: Radius.circular(24),
-//               bottomRight: Radius.circular(12),
-//               bottomLeft: Radius.circular(12)),
-//         ),
-//         padding: EdgeInsets.only(left: 10.w, right: 16.w),
-//         child: Row(
-//           crossAxisAlignment: CrossAxisAlignment.start,
-//           children: [
-//             Padding(
-//               padding: const EdgeInsets.only(top: 14).h,
-//               child: Stack(
-//                 children: [
-//                   SizedBox(
-//                       width: 35.w,
-//                       height: 40.w,
-//                       child: Assets.images.iconFilesFile.image()),
-//                   Visibility(
-//                     visible: item.isExample.isTrue,
-//                     child: Container(
-//                       margin: const EdgeInsets.only(top: 32).w,
-//                       decoration: BoxDecoration(
-//                           color: "#B2BAC4".toColor(),
-//                           borderRadius: BorderRadius.circular(4)),
-//                       padding: const EdgeInsets.symmetric(
-//                               horizontal: 5.5, vertical: 2)
-//                           .w,
-//                       child: Text(StringName.homeTalkExample.tr,
-//                           style: TextStyle(
-//                               height: 1,
-//                               fontSize: 12.sp,
-//                               color: ColorName.white)),
-//                     ),
-//                   ),
-//                 ],
-//               ),
-//             ),
-//             SizedBox(width: 8.w),
-//             Expanded(
-//               child: Column(
-//                 mainAxisAlignment: MainAxisAlignment.center,
-//                 crossAxisAlignment: CrossAxisAlignment.start,
-//                 children: [
-//                   Text(item.title.value.orEmpty,
-//                       maxLines: 1,
-//                       overflow: TextOverflow.ellipsis,
-//                       style: TextStyle(
-//                           fontSize: 15.sp,
-//                           color: ColorName.primaryTextColor,
-//                           fontWeight: FontWeight.bold)),
-//                   SizedBox(height: 5.h),
-//                   Text(
-//                     item.summary.value.orEmpty,
-//                     style: TextStyle(
-//                         fontSize: 12.sp, color: ColorName.secondaryTextColor),
-//                     overflow: TextOverflow.ellipsis,
-//                     maxLines: 2,
-//                   ),
-//                   SizedBox(height: 8.h),
-//                   Row(
-//                     crossAxisAlignment: CrossAxisAlignment.center,
-//                     children: [
-//                       Text(item.duration.toFormattedDuration(),
-//                           style: TextStyle(
-//                               fontSize: 12.sp,
-//                               color: ColorName.tertiaryTextColor)),
-//                       SizedBox(width: 6.w),
-//                       Container(
-//                           width: 1,
-//                           height: 9,
-//                           color: ColorName.tertiaryTextColor),
-//                       SizedBox(width: 6.w),
-//                       Text(item.createTime.orEmpty,
-//                           style: TextStyle(
-//                               fontSize: 12.sp,
-//                               color: ColorName.tertiaryTextColor))
-//                     ],
-//                   )
-//                 ],
-//               ),
-//             )
-//           ],
-//         )),
-//   );
-// }
-
-// Widget buildTitle(String titleName, VoidCallback? onTap) {
-//   return Padding(
-//     padding: const EdgeInsets.symmetric(horizontal: 12).w,
-//     child: Row(
-//       crossAxisAlignment: CrossAxisAlignment.center,
-//       children: [
-//         Text(titleName,
-//             style: TextStyle(
-//                 fontWeight: FontWeight.bold,
-//                 fontSize: 17.sp,
-//                 color: ColorName.primaryTextColor)),
-//         const Spacer(),
-//         Visibility(
-//           visible: onTap == null ? false : true,
-//           child: GestureDetector(
-//             onTap: onTap,
-//             child: Padding(
-//               padding: const EdgeInsets.symmetric(vertical: 6).w,
-//               child: Row(
-//                 crossAxisAlignment: CrossAxisAlignment.center,
-//                 children: [
-//                   Text(
-//                     StringName.homeTalkSeeAll.tr,
-//                     style: TextStyle(
-//                         fontSize: 13.sp, color: ColorName.tertiaryTextColor),
-//                   ),
-//                   Container(
-//                       margin: const EdgeInsets.only(bottom: 1),
-//                       width: 16.w,
-//                       height: 16.w,
-//                       child: Assets.images.iconHomeTalkArrow.image()),
-//                 ],
-//               ),
-//             ),
-//           ),
-//         )
-//       ],
-//     ),
-//   );
-// }
 }
 }
 
 
-// Widget buildAgendaEmptyView(double top, {bool isVisible = true}) {
-//   return Visibility(
-//     visible: isVisible,
-//     child: Container(
-//       width: double.infinity,
-//       padding: EdgeInsets.symmetric(vertical: top),
-//       child: Column(
-//         children: [
-//           SizedBox(
-//               width: 100.w,
-//               height: 100.w,
-//               child: Assets.images.iconNoTask.image()),
-//           SizedBox(height: 4.h),
-//           Text(StringName.agendaNoData.tr,
-//               style: TextStyle(
-//                   color: ColorName.secondaryTextColor, fontSize: 14.sp)),
-//         ],
-//       ),
-//     ),
-//   );
-// }
-
 Widget getHomeHeadView(
 Widget getHomeHeadView(
     {GlobalKey? key,
     {GlobalKey? key,
     VoidCallback? recordClick,
     VoidCallback? recordClick,
@@ -665,4 +316,4 @@ class CommonSliverHeaderDelegate extends SliverPersistentHeaderDelegate {
   bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) {
   bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) {
     return true;
     return true;
   }
   }
-}
+}