From 6ebfe5872e4631b7f764c02d089f2c86362848a0 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sat, 2 Dec 2023 22:41:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A6=96=E9=A1=B5=E9=A1=B6=E6=A0=8F&?= =?UTF-8?q?=E5=BA=95=E6=A0=8F=E5=9B=BA=E5=AE=9A=20issues=20#243?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/bangumi/view.dart | 5 +++++ lib/pages/home/controller.dart | 8 ++++++++ lib/pages/home/view.dart | 16 +++++++++++++--- lib/pages/hot/view.dart | 5 +++++ lib/pages/live/view.dart | 5 +++++ lib/pages/main/controller.dart | 2 ++ lib/pages/main/view.dart | 6 +++++- lib/pages/rcmd/view.dart | 5 +++++ lib/pages/setting/style_setting.dart | 21 ++++++++++++++------- lib/pages/setting/widgets/switch_item.dart | 6 ++++++ lib/utils/storage.dart | 2 ++ 11 files changed, 70 insertions(+), 11 deletions(-) diff --git a/lib/pages/bangumi/view.dart b/lib/pages/bangumi/view.dart index e48715eb..a2e8ae0f 100644 --- a/lib/pages/bangumi/view.dart +++ b/lib/pages/bangumi/view.dart @@ -6,6 +6,7 @@ import 'package:flutter/rendering.dart'; import 'package:get/get.dart'; import 'package:pilipala/common/constants.dart'; import 'package:pilipala/common/widgets/http_error.dart'; +import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/main/index.dart'; import 'package:pilipala/pages/rcmd/view.dart'; @@ -35,6 +36,8 @@ class _BangumiPageState extends State scrollController = _bangumidController.scrollController; StreamController mainStream = Get.find().bottomBarStream; + StreamController searchBarStream = + Get.find().searchBarStream; _futureBuilderFuture = _bangumidController.queryBangumiListFeed(); _futureBuilderFutureFollow = _bangumidController.queryBangumiFollow(); scrollController.addListener( @@ -51,8 +54,10 @@ class _BangumiPageState extends State scrollController.position.userScrollDirection; if (direction == ScrollDirection.forward) { mainStream.add(true); + searchBarStream.add(true); } else if (direction == ScrollDirection.reverse) { mainStream.add(false); + searchBarStream.add(false); } }, ); diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index 4239096c..5b722527 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; @@ -15,6 +17,10 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { RxBool userLogin = false.obs; RxString userFace = ''.obs; var userInfo; + Box setting = GStrorage.setting; + late final StreamController searchBarStream = + StreamController.broadcast(); + late bool hideSearchBar; @override void onInit() { @@ -33,6 +39,8 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { length: tabs.length, vsync: this, ); + hideSearchBar = + setting.get(SettingBoxKey.hideSearchBar, defaultValue: true); } void onRefresh() { diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 3cdf81c7..fa5a1cc9 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; @@ -18,11 +20,17 @@ class _HomePageState extends State with AutomaticKeepAliveClientMixin, TickerProviderStateMixin { final HomeController _homeController = Get.put(HomeController()); List videoList = []; - Stream stream = Get.find().bottomBarStream.stream; + late Stream stream; @override bool get wantKeepAlive => true; + @override + void initState() { + super.initState(); + stream = _homeController.searchBarStream.stream; + } + showUserBottonSheet() { feedBack(); showModalBottomSheet( @@ -46,7 +54,9 @@ class _HomePageState extends State body: Column( children: [ CustomAppBar( - stream: stream, + stream: _homeController.hideSearchBar + ? stream + : StreamController.broadcast().stream, ctr: _homeController, callback: showUserBottonSheet, ), @@ -118,7 +128,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { duration: const Duration(milliseconds: 500), height: snapshot.data ? MediaQuery.of(context).padding.top + 52 - : MediaQuery.of(context).padding.top, + : MediaQuery.of(context).padding.top - 10, child: Container( padding: EdgeInsets.only( left: 20, diff --git a/lib/pages/hot/view.dart b/lib/pages/hot/view.dart index 16ee4348..4b098063 100644 --- a/lib/pages/hot/view.dart +++ b/lib/pages/hot/view.dart @@ -9,6 +9,7 @@ import 'package:pilipala/common/widgets/overlay_pop.dart'; import 'package:pilipala/common/skeleton/video_card_h.dart'; import 'package:pilipala/common/widgets/http_error.dart'; import 'package:pilipala/common/widgets/video_card_h.dart'; +import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/hot/controller.dart'; import 'package:pilipala/pages/main/index.dart'; @@ -35,6 +36,8 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { scrollController = _hotController.scrollController; StreamController mainStream = Get.find().bottomBarStream; + StreamController searchBarStream = + Get.find().searchBarStream; scrollController.addListener( () { if (scrollController.position.pixels >= @@ -49,8 +52,10 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { scrollController.position.userScrollDirection; if (direction == ScrollDirection.forward) { mainStream.add(true); + searchBarStream.add(true); } else if (direction == ScrollDirection.reverse) { mainStream.add(false); + searchBarStream.add(false); } }, ); diff --git a/lib/pages/live/view.dart b/lib/pages/live/view.dart index 1fbff63c..c224dddf 100644 --- a/lib/pages/live/view.dart +++ b/lib/pages/live/view.dart @@ -9,6 +9,7 @@ import 'package:pilipala/common/skeleton/video_card_v.dart'; import 'package:pilipala/common/widgets/animated_dialog.dart'; import 'package:pilipala/common/widgets/http_error.dart'; import 'package:pilipala/common/widgets/overlay_pop.dart'; +import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/main/index.dart'; import 'package:pilipala/pages/rcmd/index.dart'; @@ -38,6 +39,8 @@ class _LivePageState extends State scrollController = _liveController.scrollController; StreamController mainStream = Get.find().bottomBarStream; + StreamController searchBarStream = + Get.find().searchBarStream; scrollController.addListener( () { if (scrollController.position.pixels >= @@ -52,8 +55,10 @@ class _LivePageState extends State scrollController.position.userScrollDirection; if (direction == ScrollDirection.forward) { mainStream.add(true); + searchBarStream.add(true); } else if (direction == ScrollDirection.reverse) { mainStream.add(false); + searchBarStream.add(false); } }, ); diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 1d296105..a322c5f3 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -55,6 +55,7 @@ class MainController extends GetxController { StreamController.broadcast(); Box setting = GStrorage.setting; DateTime? _lastPressedAt; + late bool hideTabBar; @override void onInit() { @@ -62,6 +63,7 @@ class MainController extends GetxController { if (setting.get(SettingBoxKey.autoUpdate, defaultValue: false)) { Utils.checkUpdata(); } + hideTabBar = setting.get(SettingBoxKey.hideTabBar, defaultValue: true); } Future onBackPressed(BuildContext context) { diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index 33b46ad9..fef5620d 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; @@ -142,7 +144,9 @@ class _MainAppState extends State with SingleTickerProviderStateMixin { ), ), bottomNavigationBar: StreamBuilder( - stream: _mainController.bottomBarStream.stream, + stream: _mainController.hideTabBar + ? _mainController.bottomBarStream.stream + : StreamController.broadcast().stream, initialData: true, builder: (context, AsyncSnapshot snapshot) { return AnimatedSlide( diff --git a/lib/pages/rcmd/view.dart b/lib/pages/rcmd/view.dart index 51771d3c..a0f867f7 100644 --- a/lib/pages/rcmd/view.dart +++ b/lib/pages/rcmd/view.dart @@ -11,6 +11,7 @@ import 'package:pilipala/common/widgets/animated_dialog.dart'; import 'package:pilipala/common/widgets/http_error.dart'; import 'package:pilipala/common/widgets/overlay_pop.dart'; import 'package:pilipala/common/widgets/video_card_v.dart'; +import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/main/index.dart'; import 'controller.dart'; @@ -37,6 +38,8 @@ class _RcmdPageState extends State ScrollController scrollController = _rcmdController.scrollController; StreamController mainStream = Get.find().bottomBarStream; + StreamController searchBarStream = + Get.find().searchBarStream; scrollController.addListener( () { if (scrollController.position.pixels >= @@ -52,8 +55,10 @@ class _RcmdPageState extends State scrollController.position.userScrollDirection; if (direction == ScrollDirection.forward) { mainStream.add(true); + searchBarStream.add(true); } else if (direction == ScrollDirection.reverse) { mainStream.add(false); + searchBarStream.add(false); } }, ); diff --git a/lib/pages/setting/style_setting.dart b/lib/pages/setting/style_setting.dart index 2256b2fd..43335318 100644 --- a/lib/pages/setting/style_setting.dart +++ b/lib/pages/setting/style_setting.dart @@ -83,13 +83,20 @@ class _StyleSettingState extends State { setKey: SettingBoxKey.enableMYBar, defaultVal: true, ), - // SetSwitchItem( - // title: '首页单列', - // subTitle: '每行展示一个内容卡片', - // setKey: SettingBoxKey.enableSingleRow, - // defaultVal: false, - // callFn: (val) => {SmartDialog.showToast('下次启动时生效')}, - // ), + const SetSwitchItem( + title: '首页顶栏收起', + subTitle: '首页列表滑动时,收起顶栏', + setKey: SettingBoxKey.hideSearchBar, + defaultVal: true, + needReboot: true, + ), + const SetSwitchItem( + title: '首页底栏收起', + subTitle: '首页列表滑动时,收起底栏', + setKey: SettingBoxKey.hideTabBar, + defaultVal: true, + needReboot: true, + ), ListTile( dense: false, title: Text('自定义列数', style: titleStyle), diff --git a/lib/pages/setting/widgets/switch_item.dart b/lib/pages/setting/widgets/switch_item.dart index 0e091b9a..488ade14 100644 --- a/lib/pages/setting/widgets/switch_item.dart +++ b/lib/pages/setting/widgets/switch_item.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/utils.dart'; @@ -9,6 +10,7 @@ class SetSwitchItem extends StatefulWidget { final String? setKey; final bool? defaultVal; final Function? callFn; + final bool? needReboot; const SetSwitchItem({ this.title, @@ -16,6 +18,7 @@ class SetSwitchItem extends StatefulWidget { this.setKey, this.defaultVal, this.callFn, + this.needReboot, Key? key, }) : super(key: key); @@ -43,6 +46,9 @@ class _SetSwitchItemState extends State { if (widget.callFn != null) { widget.callFn!.call(val); } + if (widget.needReboot != null && widget.needReboot!) { + SmartDialog.showToast('重启生效'); + } setState(() {}); } diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 1d20877b..062b6df9 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -138,6 +138,8 @@ class SettingBoxKey { static const String displayMode = 'displayMode'; static const String customRows = 'customRows'; // 自定义列 static const String enableMYBar = 'enableMYBar'; + static const String hideSearchBar = 'hideSearchBar'; // 收起顶栏 + static const String hideTabBar = 'hideTabBar'; // 收起底栏 } class LocalCacheKey {