feat: upgrade Riverpod 3, go_router 17, google_fonts 8, package_info_plus 9

Migrate StateNotifierProvider/StateNotifier → NotifierProvider/Notifier,
StateProvider → NotifierProvider with simple notifier, FamilyAsyncNotifier
removed in Riverpod 3 (replaced with constructor-arg pattern), and rename
.valueOrNull → .value throughout all providers and screens.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 06:21:17 -04:00
parent c8becd6afd
commit a687e3637f
12 changed files with 120 additions and 91 deletions
+1 -1
View File
@@ -70,7 +70,7 @@ class _ChatScreenState extends ConsumerState<ChatScreen> {
final convTitle = ref
.watch(conversationsProvider)
.valueOrNull
.value
?.where((c) => c.id == widget.conversationId)
.firstOrNull
?.title;
+2 -2
View File
@@ -228,8 +228,8 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen> {
AsyncValue<List<Note>> notesAsync,
AsyncValue<List<Task>> tasksAsync,
) {
final notes = notesAsync.valueOrNull ?? [];
final tasks = tasksAsync.valueOrNull ?? [];
final notes = notesAsync.value ?? [];
final tasks = tasksAsync.value ?? [];
// Merge and sort by updatedAt desc
final items = <(DateTime, Widget)>[];
+1 -1
View File
@@ -16,7 +16,7 @@ class NoteDetailScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final noteAsync = ref.watch(noteDetailProvider(noteId));
final allNotes = ref.watch(notesProvider).valueOrNull ?? [];
final allNotes = ref.watch(notesProvider).value ?? [];
void navigateByTitle(String title) {
final matches = allNotes.where(