Skip to content

Commit 294af22

Browse files
authored
Merge pull request #176 from brianegan/change-notifier-provider-fix
ChangeNotifierProviderSample updates
2 parents 5f76def + 0ed39b0 commit 294af22

File tree

5 files changed

+37
-26
lines changed

5 files changed

+37
-26
lines changed

change_notifier_provider/lib/app.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ProviderApp extends StatelessWidget {
2323
@override
2424
Widget build(BuildContext context) {
2525
return ChangeNotifierProvider(
26-
create: (_) => TodoListModel(repository: repository),
26+
create: (_) => TodoListModel(repository: repository)..loadTodos(),
2727
child: MaterialApp(
2828
theme: ArchSampleTheme.theme,
2929
localizationsDelegates: [

change_notifier_provider/lib/todo_list_model.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,6 @@ class TodoListModel extends ChangeNotifier {
3939
}) : _todos = todos ?? [],
4040
_filter = filter ?? VisibilityFilter.all;
4141

42-
@override
43-
void addListener(VoidCallback listener) {
44-
super.addListener(listener);
45-
// update data for every subscriber, especially for the first one
46-
loadTodos();
47-
}
48-
4942
/// Loads remote data
5043
///
5144
/// Call this initially and when the user manually refreshes

change_notifier_provider/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ environment:
1717
sdk: ">=2.6.0 <3.0.0"
1818

1919
dependencies:
20-
provider: ^4.0.1
20+
provider: ^4.0.4
2121
todos_repository_local_storage:
2222
path: ../todos_repository_local_storage
2323
todos_app_core:

change_notifier_provider/test/home_screen_test.dart

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import 'package:flutter/cupertino.dart';
2-
import 'package:flutter/material.dart';
3-
import 'package:flutter_test/flutter_test.dart';
4-
import 'package:provider/provider.dart';
51
import 'package:change_notifier_provider_sample/home/home_screen.dart';
62
import 'package:change_notifier_provider_sample/localization.dart';
73
import 'package:change_notifier_provider_sample/models.dart';
84
import 'package:change_notifier_provider_sample/todo_list_model.dart';
5+
import 'package:flutter/cupertino.dart';
6+
import 'package:flutter/material.dart';
7+
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:provider/provider.dart';
99
import 'package:todos_app_core/todos_app_core.dart';
1010
import 'package:todos_repository_core/todos_repository_core.dart';
1111

1212
import 'mock_repository.dart';
1313

14-
/// Demonstrates how to test Widgets
14+
/// Demonstrates how to test Widgets in combination with a ChangeNotifier
1515
void main() {
1616
group('HomeScreen', () {
1717
final todoListFinder = find.byKey(ArchSampleKeys.todoList);
@@ -91,16 +91,16 @@ class _TestWidget extends StatelessWidget {
9191
Key key,
9292
this.child,
9393
this.repository,
94-
this.todos = const [],
94+
this.todos,
9595
}) : super(key: key);
9696

9797
@override
9898
Widget build(BuildContext context) {
9999
return ChangeNotifierProvider<TodoListModel>(
100-
create: (_) => TodoListModel(
101-
repository: MockRepository([]),
102-
todos: defaultTodos(),
103-
),
100+
create: (_) {
101+
final repo = MockRepository(todos ?? _defaultTodos);
102+
return TodoListModel(repository: repo)..loadTodos();
103+
},
104104
child: MaterialApp(
105105
localizationsDelegates: [
106106
ProviderLocalizationsDelegate(),
@@ -110,14 +110,14 @@ class _TestWidget extends StatelessWidget {
110110
),
111111
);
112112
}
113-
}
114113

115-
List<Todo> defaultTodos() {
116-
return [
117-
Todo('T1', id: '1', note: 'N1'),
118-
Todo('T2', id: '2'),
119-
Todo('T3', id: '3', complete: true),
120-
];
114+
static List<Todo> get _defaultTodos {
115+
return [
116+
Todo('T1', id: '1', note: 'N1'),
117+
Todo('T2', id: '2'),
118+
Todo('T3', id: '3', complete: true),
119+
];
120+
}
121121
}
122122

123123
Matcher isChecked(bool isChecked) {

change_notifier_provider/test/app_state_test.dart renamed to change_notifier_provider/test/todo_list_model_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,23 @@ void main() {
141141
expect(model.todos, [todo1, update, todo3]);
142142
expect(repository.saveCount, 1);
143143
});
144+
145+
test('should load todos from the repository', () async {
146+
final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)];
147+
final repository = MockRepository(todos);
148+
final model = TodoListModel(repository: repository);
149+
150+
expect(model.isLoading, isFalse);
151+
expect(model.todos, []);
152+
153+
final loading = model.loadTodos();
154+
155+
expect(model.isLoading, isTrue);
156+
157+
await loading;
158+
159+
expect(model.isLoading, isFalse);
160+
expect(model.todos, todos);
161+
});
144162
});
145163
}

0 commit comments

Comments
 (0)