feat: 首页顶栏&底栏固定 issues #243

This commit is contained in:
guozhigq
2023-12-02 22:41:24 +08:00
parent 7ed91a72c6
commit 6ebfe5872e
11 changed files with 70 additions and 11 deletions

View File

@ -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<BangumiPage>
scrollController = _bangumidController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream;
_futureBuilderFuture = _bangumidController.queryBangumiListFeed();
_futureBuilderFutureFollow = _bangumidController.queryBangumiFollow();
scrollController.addListener(
@ -51,8 +54,10 @@ class _BangumiPageState extends State<BangumiPage>
scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
mainStream.add(true);
searchBarStream.add(true);
} else if (direction == ScrollDirection.reverse) {
mainStream.add(false);
searchBarStream.add(false);
}
},
);

View File

@ -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<bool> searchBarStream =
StreamController<bool>.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() {

View File

@ -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<HomePage>
with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
final HomeController _homeController = Get.put(HomeController());
List videoList = [];
Stream<bool> stream = Get.find<MainController>().bottomBarStream.stream;
late Stream<bool> 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<HomePage>
body: Column(
children: [
CustomAppBar(
stream: stream,
stream: _homeController.hideSearchBar
? stream
: StreamController<bool>.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,

View File

@ -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<HotPage> with AutomaticKeepAliveClientMixin {
scrollController = _hotController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream;
scrollController.addListener(
() {
if (scrollController.position.pixels >=
@ -49,8 +52,10 @@ class _HotPageState extends State<HotPage> 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);
}
},
);

View File

@ -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<LivePage>
scrollController = _liveController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream;
scrollController.addListener(
() {
if (scrollController.position.pixels >=
@ -52,8 +55,10 @@ class _LivePageState extends State<LivePage>
scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
mainStream.add(true);
searchBarStream.add(true);
} else if (direction == ScrollDirection.reverse) {
mainStream.add(false);
searchBarStream.add(false);
}
},
);

View File

@ -55,6 +55,7 @@ class MainController extends GetxController {
StreamController<bool>.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<bool> onBackPressed(BuildContext context) {

View File

@ -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<MainApp> with SingleTickerProviderStateMixin {
),
),
bottomNavigationBar: StreamBuilder(
stream: _mainController.bottomBarStream.stream,
stream: _mainController.hideTabBar
? _mainController.bottomBarStream.stream
: StreamController<bool>.broadcast().stream,
initialData: true,
builder: (context, AsyncSnapshot snapshot) {
return AnimatedSlide(

View File

@ -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<RcmdPage>
ScrollController scrollController = _rcmdController.scrollController;
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
Get.find<HomeController>().searchBarStream;
scrollController.addListener(
() {
if (scrollController.position.pixels >=
@ -52,8 +55,10 @@ class _RcmdPageState extends State<RcmdPage>
scrollController.position.userScrollDirection;
if (direction == ScrollDirection.forward) {
mainStream.add(true);
searchBarStream.add(true);
} else if (direction == ScrollDirection.reverse) {
mainStream.add(false);
searchBarStream.add(false);
}
},
);

View File

@ -83,13 +83,20 @@ class _StyleSettingState extends State<StyleSetting> {
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),

View File

@ -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<SetSwitchItem> {
if (widget.callFn != null) {
widget.callFn!.call(val);
}
if (widget.needReboot != null && widget.needReboot!) {
SmartDialog.showToast('重启生效');
}
setState(() {});
}

View File

@ -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 {