fix:底部导航栏和滑动的冲突

This commit is contained in:
DelLevin-Home
2026-06-28 23:55:43 +08:00
parent b65e55fbe1
commit ede0b10b19
6 changed files with 46 additions and 26 deletions

View File

@@ -11,7 +11,7 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
## 应用预览 ## 应用预览
| 影视列表 | 书籍列表 | 笔记界面 | | 影视列表 | 书籍列表 | 笔记界面 |
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: | | :---------------------------------------: | :---------------------------------------: | :---------------------------------------: |
| ![影视列表](image/README/1782484732881.png) | ![书籍列表](image/README/1782484753882.png) | ![笔记界面](image/README/1782484769014.png) | | ![影视列表](image/README/1782484732881.png) | ![书籍列表](image/README/1782484753882.png) | ![笔记界面](image/README/1782484769014.png) |
更多预览图片请到**应用功能详情预览**里面查看 更多预览图片请到**应用功能详情预览**里面查看
@@ -94,7 +94,7 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
## 技术栈 ## 技术栈
| 类别 | 技术 | | 类别 | 技术 |
| ---------- | ------------------------------- | | ---------- | -------------------------------------- |
| 框架 | Flutter 3.5+ | | 框架 | Flutter 3.5+ |
| 语言 | Dart | | 语言 | Dart |
| 状态管理 | Provider | | 状态管理 | Provider |
@@ -220,15 +220,15 @@ flutter build appbundle --release
## 应用功能详情预览 ## 应用功能详情预览
| 数据统计 | 侧边栏 | 我的界面 | | 数据统计 | 侧边栏 | 我的界面 |
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: | | :---------------------------------------: | :-------------------------------------: | :---------------------------------------: |
| ![数据统计](image/README/1782484806542.png) | ![侧边栏](image/README/1782484815573.png) | ![我的界面](image/README/1782484824223.png) | | ![数据统计](image/README/1782484806542.png) | ![侧边栏](image/README/1782484815573.png) | ![我的界面](image/README/1782484824223.png) |
| 详情界面1 | 详情界面2 | 编辑笔记 | | 详情界面1 | 详情界面2 | 编辑笔记 |
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: | | :----------------------------------------: | :----------------------------------------: | :---------------------------------------: |
| ![详情界面1](image/README/1782484832641.png) | ![详情界面2](image/README/1782484836809.png) | ![编辑笔记](image/README/1782484844066.png) | | ![详情界面1](image/README/1782484832641.png) | ![详情界面2](image/README/1782484836809.png) | ![编辑笔记](image/README/1782484844066.png) |
| 分享界面1 | 分享界面2 | 预览笔记 | | 分享界面1 | 分享界面2 | 预览笔记 |
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: | | :----------------------------------------: | :----------------------------------------: | :---------------------------------------: |
| ![分享界面1](image/README/1782484860728.png) | ![分享界面2](image/README/1782484855884.png) | ![预览笔记](image/README/1782484849659.png) | | ![分享界面1](image/README/1782484860728.png) | ![分享界面2](image/README/1782484855884.png) | ![预览笔记](image/README/1782484849659.png) |
## 影视书籍资源数据对接 ## 影视书籍资源数据对接

View File

@@ -28,6 +28,7 @@ class _BookTabPageState extends State<BookTabPage> {
late ScrollController _scrollController; late ScrollController _scrollController;
AppProvider? _provider; AppProvider? _provider;
int _lastScrollSignal = 0; int _lastScrollSignal = 0;
int _prevBookCount = -1;
static const _statusMap = {0: 'read', 1: 'reading', 2: 'want_to_read'}; static const _statusMap = {0: 'read', 1: 'reading', 2: 'want_to_read'};
@@ -63,9 +64,14 @@ class _BookTabPageState extends State<BookTabPage> {
} }
} }
// 数据变化时刷新列表(排序/评分/新增等) // 仅在数据实际变化时刷新列表避免底部导航栏显隐等UI变化误触发重载
final statusChanged = provider.bookStatusIndex != _lastStatusIndex;
final countChanged = provider.books.length != _prevBookCount;
if (statusChanged || countChanged) {
_prevBookCount = provider.books.length;
_loadFirst(); _loadFirst();
} }
}
void _onScroll() { void _onScroll() {
if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 200) { if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 200) {

View File

@@ -27,6 +27,8 @@ class _MovieTabPageState extends State<MovieTabPage> {
late ScrollController _scrollController; late ScrollController _scrollController;
AppProvider? _provider; AppProvider? _provider;
int _lastScrollSignal = 0; int _lastScrollSignal = 0;
int _prevMovieCount = -1;
int _prevLayoutStyle = -1;
static const _statusMap = {0: 'watched', 1: 'watching', 2: 'want_to_watch'}; static const _statusMap = {0: 'watched', 1: 'watching', 2: 'want_to_watch'};
@@ -61,9 +63,16 @@ class _MovieTabPageState extends State<MovieTabPage> {
} }
} }
// 数据变化时刷新列表(排序/评分/新增等) // 仅在数据或布局实际变化时刷新列表避免底部导航栏显隐等UI变化误触发重载
final statusChanged = provider.movieStatusIndex != _lastStatusIndex;
final layoutChanged = provider.movieLayoutStyle != _prevLayoutStyle;
final countChanged = provider.movies.length != _prevMovieCount;
if (statusChanged || layoutChanged || countChanged) {
_prevLayoutStyle = provider.movieLayoutStyle;
_prevMovieCount = provider.movies.length;
_loadFirst(); _loadFirst();
} }
}
void _onScroll() { void _onScroll() {
if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 200) { if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 200) {

View File

@@ -25,6 +25,7 @@ class _NoteTabPageState extends State<NoteTabPage> {
int _layoutStyle = 0; int _layoutStyle = 0;
bool _initialized = false; bool _initialized = false;
int _lastScrollSignal = 0; int _lastScrollSignal = 0;
int _prevNoteCount = -1;
@override @override
void initState() { void initState() {
@@ -57,9 +58,13 @@ class _NoteTabPageState extends State<NoteTabPage> {
} }
} }
// 数据变化时刷新列表(排序/评分/新增等) // 仅在数据实际变化时刷新列表避免底部导航栏显隐等UI变化误触发重载
final countChanged = provider.notes.length != _prevNoteCount;
if (countChanged) {
_prevNoteCount = provider.notes.length;
_loadFirst(); _loadFirst();
} }
}
void _onScroll() { void _onScroll() {
if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 200) { if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 200) {

View File

@@ -135,7 +135,7 @@ class UserPrefs {
bool get showSidebarTags => prefs.getBool('showSidebarTags') ?? true; bool get showSidebarTags => prefs.getBool('showSidebarTags') ?? true;
Future<bool> setShowSidebarTags(bool value) => prefs.setBool('showSidebarTags', value); Future<bool> setShowSidebarTags(bool value) => prefs.setBool('showSidebarTags', value);
bool get showSidebarMdReader => prefs.getBool('showSidebarMdReader') ?? true; bool get showSidebarMdReader => prefs.getBool('showSidebarMdReader') ?? false;
Future<bool> setShowSidebarMdReader(bool value) => prefs.setBool('showSidebarMdReader', value); Future<bool> setShowSidebarMdReader(bool value) => prefs.setBool('showSidebarMdReader', value);
bool get showSidebarEpub => prefs.getBool('showSidebarEpub') ?? true; bool get showSidebarEpub => prefs.getBool('showSidebarEpub') ?? true;

View File

@@ -1,7 +1,7 @@
name: mooknote name: mooknote
description: "app for tracking movies, books, and notes" description: "app for tracking movies, books, and notes"
publish_to: 'none' publish_to: 'none'
version: 0.2.0 version: 0.2.1
environment: environment:
sdk: ^3.5.0 sdk: ^3.5.0