generated from dellevin/template
fix:底部导航栏和滑动的冲突
This commit is contained in:
10
README.md
10
README.md
@@ -11,7 +11,7 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
|
|||||||
## 应用预览
|
## 应用预览
|
||||||
|
|
||||||
| 影视列表 | 书籍列表 | 笔记界面 |
|
| 影视列表 | 书籍列表 | 笔记界面 |
|
||||||
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: |
|
| :---------------------------------------: | :---------------------------------------: | :---------------------------------------: |
|
||||||
|  |  |  |
|
|  |  |  |
|
||||||
|
|
||||||
更多预览图片请到**应用功能详情预览**里面查看
|
更多预览图片请到**应用功能详情预览**里面查看
|
||||||
@@ -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
|
|||||||
## 应用功能详情预览
|
## 应用功能详情预览
|
||||||
|
|
||||||
| 数据统计 | 侧边栏 | 我的界面 |
|
| 数据统计 | 侧边栏 | 我的界面 |
|
||||||
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: |
|
| :---------------------------------------: | :-------------------------------------: | :---------------------------------------: |
|
||||||
|  |  |  |
|
|  |  |  |
|
||||||
|
|
||||||
| 详情界面1 | 详情界面2 | 编辑笔记 |
|
| 详情界面1 | 详情界面2 | 编辑笔记 |
|
||||||
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: |
|
| :----------------------------------------: | :----------------------------------------: | :---------------------------------------: |
|
||||||
|  |  |  |
|
|  |  |  |
|
||||||
|
|
||||||
| 分享界面1 | 分享界面2 | 预览笔记 |
|
| 分享界面1 | 分享界面2 | 预览笔记 |
|
||||||
| :--------------------------------------------: | :--------------------------------------------: | :--------------------------------------------: |
|
| :----------------------------------------: | :----------------------------------------: | :---------------------------------------: |
|
||||||
|  |  |  |
|
|  |  |  |
|
||||||
|
|
||||||
## 影视书籍资源数据对接
|
## 影视书籍资源数据对接
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user