feat: Add refresh token mechanism and sync request handling in home screen
This commit is contained in:
@@ -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(() {
|
||||
|
||||
Reference in New Issue
Block a user