generated from dellevin/template
优化编辑之后回到第一页的问题
This commit is contained in:
@@ -1333,7 +1333,7 @@ class _BookDetailPageState extends State<BookDetailPage> {
|
||||
void _navigateToEdit(BuildContext context) {
|
||||
final provider = context.read<AppProvider>();
|
||||
Navigator.pushNamed(context, '/book-form', arguments: widget.book).then((_) {
|
||||
provider.setEditRefresh();
|
||||
provider.setEditRefresh(widget.book.id);
|
||||
provider.loadBooks();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -82,6 +82,20 @@ class _BookTabPageState extends State<BookTabPage> {
|
||||
final statusChanged = provider.bookStatusIndex != _lastStatusIndex;
|
||||
final countChanged = provider.books.length != _prevBookCount;
|
||||
final editRefreshed = provider.editRefreshCounter > _lastEditRefreshCounter;
|
||||
if (editRefreshed && provider.lastEditedItemId != null) {
|
||||
// 就地更新被编辑的条目,不重置分页
|
||||
_lastEditRefreshCounter = provider.editRefreshCounter;
|
||||
_prevBookCount = provider.books.length;
|
||||
final editedId = provider.lastEditedItemId!;
|
||||
final idx = _items.indexWhere((b) => b.id == editedId);
|
||||
if (idx != -1) {
|
||||
final updated = provider.books.where((b) => b.id == editedId).firstOrNull;
|
||||
if (updated != null) {
|
||||
setState(() { _items[idx] = updated; });
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (statusChanged || countChanged || editRefreshed) {
|
||||
_prevBookCount = provider.books.length;
|
||||
_loadFirst();
|
||||
|
||||
@@ -1147,7 +1147,7 @@ class _MovieDetailPageState extends State<MovieDetailPage> {
|
||||
void _navigateToEdit(BuildContext context) {
|
||||
final provider = context.read<AppProvider>();
|
||||
Navigator.pushNamed(context, '/movie-form', arguments: widget.movie).then((_) {
|
||||
provider.setEditRefresh();
|
||||
provider.setEditRefresh(widget.movie.id);
|
||||
provider.loadMovies();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -74,6 +74,20 @@ class _MovieTabPageState extends State<MovieTabPage> {
|
||||
final layoutChanged = provider.movieLayoutStyle != _prevLayoutStyle;
|
||||
final countChanged = provider.movies.length != _prevMovieCount;
|
||||
final editRefreshed = provider.editRefreshCounter > _lastEditRefreshCounter;
|
||||
if (editRefreshed && provider.lastEditedItemId != null) {
|
||||
// 就地更新被编辑的条目,不重置分页
|
||||
_lastEditRefreshCounter = provider.editRefreshCounter;
|
||||
_prevMovieCount = provider.movies.length;
|
||||
final editedId = provider.lastEditedItemId!;
|
||||
final idx = _items.indexWhere((m) => m.id == editedId);
|
||||
if (idx != -1) {
|
||||
final updated = provider.movies.where((m) => m.id == editedId).firstOrNull;
|
||||
if (updated != null) {
|
||||
setState(() { _items[idx] = updated; });
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (statusChanged || layoutChanged || countChanged || editRefreshed) {
|
||||
_prevLayoutStyle = provider.movieLayoutStyle;
|
||||
_prevMovieCount = provider.movies.length;
|
||||
|
||||
@@ -299,6 +299,7 @@ class _NoteDetailPageState extends State<NoteDetailPage> {
|
||||
);
|
||||
final provider = context.read<AppProvider>();
|
||||
Navigator.pushNamed(context, '/note-form', arguments: currentNote).then((_) async {
|
||||
provider.setEditRefresh(currentNote.id);
|
||||
await provider.loadNotes();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ class _NoteTabPageState extends State<NoteTabPage> {
|
||||
bool _initialized = false;
|
||||
int _lastScrollSignal = 0;
|
||||
int _prevNoteCount = -1;
|
||||
int _lastEditRefreshCounter = 0;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -64,10 +65,28 @@ class _NoteTabPageState extends State<NoteTabPage> {
|
||||
|
||||
// 仅在数据实际变化时刷新列表,避免底部导航栏显隐等UI变化误触发重载
|
||||
final countChanged = provider.notes.length != _prevNoteCount;
|
||||
if (countChanged) {
|
||||
final editRefreshed = provider.editRefreshCounter > _lastEditRefreshCounter;
|
||||
if (editRefreshed && provider.lastEditedItemId != null) {
|
||||
// 就地更新被编辑的条目,不重置分页
|
||||
_lastEditRefreshCounter = provider.editRefreshCounter;
|
||||
_prevNoteCount = provider.notes.length;
|
||||
final editedId = provider.lastEditedItemId!;
|
||||
final idx = _items.indexWhere((n) => n.id == editedId);
|
||||
if (idx != -1) {
|
||||
final updated = provider.notes.where((n) => n.id == editedId).firstOrNull;
|
||||
if (updated != null) {
|
||||
setState(() { _items[idx] = updated; });
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (countChanged || editRefreshed) {
|
||||
_prevNoteCount = provider.notes.length;
|
||||
_loadFirst();
|
||||
}
|
||||
if (editRefreshed) {
|
||||
_lastEditRefreshCounter = provider.editRefreshCounter;
|
||||
}
|
||||
}
|
||||
|
||||
void _onScroll() {
|
||||
@@ -98,7 +117,7 @@ class _NoteTabPageState extends State<NoteTabPage> {
|
||||
if (Breakpoint.isWideContent(context)) {
|
||||
context.read<AppProvider>().selectNote(note);
|
||||
} else {
|
||||
Navigator.pushNamed(context, '/note-detail', arguments: note).then((_) => _loadFirst());
|
||||
Navigator.pushNamed(context, '/note-detail', arguments: note);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user