mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-09-12 22:24:40 +08:00
FolderListing: Use Provider to fetch the NotesFolder
This is our first use case of trying to use 'Provider' for state management. Right now, we're doing state management quite horribly as all the widgets are rebuilt whenever the state of the app changes. With this, we can now start to refactor and only rebuild the widgets whose data has changed. There we many many different state management solutions to choose from, I've settled on Provider, as it seems like the simplest to integrate into the code base. Bloc/Redux seemed like they would add too much complexity for me.
This commit is contained in:
@ -5,6 +5,7 @@ import 'package:fimber/fimber.dart';
|
||||
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||
import 'package:firebase_analytics/observer.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:gitjournal/apis/git.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
@ -46,7 +47,10 @@ class JournalApp extends StatelessWidget {
|
||||
|
||||
runApp(StateContainer(
|
||||
appState: appState,
|
||||
child: JournalApp(),
|
||||
child: ChangeNotifierProvider(
|
||||
child: JournalApp(),
|
||||
create: (_) => appState.notesFolder,
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:gitjournal/widgets/app_bar_menu_button.dart';
|
||||
import 'package:gitjournal/widgets/app_drawer.dart';
|
||||
@ -18,11 +19,10 @@ class _FolderListingScreenState extends State<FolderListingScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final container = StateContainer.of(context);
|
||||
final appState = container.appState;
|
||||
final notesFolder = Provider.of<NotesFolder>(context);
|
||||
|
||||
var treeView = FolderTreeView(
|
||||
rootFolder: appState.notesFolder,
|
||||
rootFolder: notesFolder,
|
||||
onFolderEntered: (NotesFolder folder) {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => JournalListingScreen(
|
||||
@ -99,9 +99,9 @@ class _CreateFolderButtonState extends State<CreateFolderButton> {
|
||||
await showDialog(context: context, builder: _buildAlert);
|
||||
if (folderName is String) {
|
||||
final container = StateContainer.of(context);
|
||||
final appState = container.appState;
|
||||
final notesFolder = Provider.of<NotesFolder>(context);
|
||||
|
||||
container.createFolder(appState.notesFolder, folderName);
|
||||
container.createFolder(notesFolder, folderName);
|
||||
}
|
||||
},
|
||||
child: Icon(Icons.add),
|
||||
|
@ -399,6 +399,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.11"
|
||||
provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: provider
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.2.0"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -29,6 +29,7 @@ dependencies:
|
||||
flushbar: ^1.9.0
|
||||
flutter_staggered_grid_view: ^0.3.0
|
||||
page_transition: "^1.1.5"
|
||||
provider: ^3.2.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_launcher_icons: "^0.7.2"
|
||||
|
Reference in New Issue
Block a user