feat: Add refresh token mechanism and sync request handling in home screen

This commit is contained in:
2026-05-18 20:12:52 +02:00
parent 7da87843cd
commit 75513da17d
3 changed files with 75 additions and 35 deletions
+20 -13
View File
@@ -17,16 +17,20 @@ class HomeScreen extends StatefulWidget {
super.key,
required this.repository,
required this.onOpenSettings,
required this.onRequestSync,
this.onVaultInvalid,
this.syncStatus = SyncStatus.idle,
this.syncErrorMessage,
this.refreshToken = 0,
});
final NoteRepository repository;
final VoidCallback onOpenSettings;
final Future<void> Function() onRequestSync;
final Future<void> Function()? onVaultInvalid;
final SyncStatus syncStatus;
final String? syncErrorMessage;
final int refreshToken;
@override
State<HomeScreen> createState() => _HomeScreenState();
@@ -52,6 +56,14 @@ class _HomeScreenState extends State<HomeScreen> {
_loadNotes();
}
@override
void didUpdateWidget(covariant HomeScreen oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.refreshToken != widget.refreshToken) {
_loadNotes();
}
}
Future<void> _loadNotes() async {
try {
final List<Note> storedNotes = await widget.repository.loadNotes();
@@ -92,10 +104,9 @@ class _HomeScreenState extends State<HomeScreen> {
_notes = updatedNotes;
});
// Trigger sync after creating a note and refresh local list
// Trigger sync after creating a note.
try {
await widget.repository.performSync();
await _loadNotes();
await widget.onRequestSync();
} catch (_) {}
}
}
@@ -115,10 +126,9 @@ class _HomeScreenState extends State<HomeScreen> {
_notes = updatedNotes;
});
// Trigger sync after deleting a note and refresh local list
// Trigger sync after deleting a note.
try {
await widget.repository.performSync();
await _loadNotes();
await widget.onRequestSync();
} catch (_) {}
}
@@ -171,10 +181,9 @@ class _HomeScreenState extends State<HomeScreen> {
setState(() {
_notes = _normalizeNotes(updatedNotes);
});
// Trigger sync after editing a note and refresh local list
// Trigger sync after editing a note.
try {
await widget.repository.performSync();
await _loadNotes();
await widget.onRequestSync();
} catch (_) {}
}
}
@@ -212,10 +221,7 @@ class _HomeScreenState extends State<HomeScreen> {
? const _EmptyState()
: RefreshIndicator(
onRefresh: () async {
try {
await widget.repository.performSync();
} catch (_) {}
await _loadNotes();
await widget.onRequestSync();
},
child: MouseRegion(
cursor: _isDragging
@@ -520,6 +526,7 @@ class _HomeScreenState extends State<HomeScreen> {
trailingWidget: SyncStatusIndicator(
status: widget.syncStatus,
errorMessage: widget.syncErrorMessage,
onTap: widget.onRequestSync,
),
onSearchChanged: (String query) {
setState(() {