优化编辑之后回到第一页的问题

This commit is contained in:
DelLevin-Home
2026-07-05 14:31:30 +08:00
parent 6dd2014f1b
commit 2f926dfdb5
7 changed files with 59 additions and 5 deletions

View File

@@ -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();
});
}

View File

@@ -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);
}
}