Skip to content

Commit 1132941

Browse files
committed
Add web version of Bloc Library example
1 parent 19f3af7 commit 1132941

File tree

7 files changed

+118
-79
lines changed

7 files changed

+118
-79
lines changed

bloc_library/.flutter-plugins-dependencies

-1
This file was deleted.

bloc_library/lib/blocs/todos/todos_bloc.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import 'package:bloc/bloc.dart';
88
import 'package:meta/meta.dart';
99
import 'package:bloc_library/blocs/todos/todos.dart';
1010
import 'package:bloc_library/models/models.dart';
11+
import 'package:todos_repository_core/todos_repository_core.dart';
1112
import 'package:todos_repository_simple/todos_repository_simple.dart';
1213

1314
class TodosBloc extends Bloc<TodosEvent, TodosState> {
14-
final TodosRepositoryFlutter todosRepository;
15+
final TodosRepository todosRepository;
1516

1617
TodosBloc({@required this.todosRepository});
1718

bloc_library/lib/main.dart

+12-77
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,16 @@
1-
// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved.
2-
// Use of this source code is governed by the MIT license that can be found
3-
// in the LICENSE file.
4-
5-
import 'package:bloc/bloc.dart';
6-
import 'package:bloc_library/blocs/blocs.dart';
7-
import 'package:bloc_library/localization.dart';
8-
import 'package:bloc_library/models/models.dart';
9-
import 'package:bloc_library/screens/screens.dart';
10-
import 'package:flutter/material.dart';
11-
import 'package:flutter_bloc/flutter_bloc.dart';
12-
import 'package:path_provider/path_provider.dart';
13-
import 'package:todos_app_core/todos_app_core.dart';
1+
import 'package:bloc_library/run_app.dart';
2+
import 'package:flutter/cupertino.dart';
3+
import 'package:key_value_store_flutter/key_value_store_flutter.dart';
4+
import 'package:shared_preferences/shared_preferences.dart';
145
import 'package:todos_repository_simple/todos_repository_simple.dart';
156

16-
void main() {
17-
// BlocSupervisor oversees Blocs and delegates to BlocDelegate.
18-
// We can set the BlocSupervisor's delegate to an instance of `SimpleBlocDelegate`.
19-
// This will allow us to handle all transitions and errors in SimpleBlocDelegate.
20-
BlocSupervisor.delegate = SimpleBlocDelegate();
21-
runApp(
22-
BlocProvider(
23-
create: (context) {
24-
return TodosBloc(
25-
todosRepository: const TodosRepositoryFlutter(
26-
fileStorage: FileStorage(
27-
'__flutter_bloc_app__',
28-
getApplicationDocumentsDirectory,
29-
),
30-
),
31-
)..add(LoadTodos());
32-
},
33-
child: TodosApp(),
34-
),
35-
);
36-
}
7+
Future<void> main() async {
8+
WidgetsFlutterBinding.ensureInitialized();
379

38-
class TodosApp extends StatelessWidget {
39-
@override
40-
Widget build(BuildContext context) {
41-
final todosBloc = BlocProvider.of<TodosBloc>(context);
42-
return MaterialApp(
43-
onGenerateTitle: (context) =>
44-
FlutterBlocLocalizations.of(context).appTitle,
45-
theme: ArchSampleTheme.theme,
46-
localizationsDelegates: [
47-
ArchSampleLocalizationsDelegate(),
48-
FlutterBlocLocalizationsDelegate(),
49-
],
50-
routes: {
51-
ArchSampleRoutes.home: (context) {
52-
return MultiBlocProvider(
53-
providers: [
54-
BlocProvider<TabBloc>(
55-
create: (context) => TabBloc(),
56-
),
57-
BlocProvider<FilteredTodosBloc>(
58-
create: (context) => FilteredTodosBloc(todosBloc: todosBloc),
59-
),
60-
BlocProvider<StatsBloc>(
61-
create: (context) => StatsBloc(todosBloc: todosBloc),
62-
),
63-
],
64-
child: HomeScreen(),
65-
);
66-
},
67-
ArchSampleRoutes.addTodo: (context) {
68-
return AddEditScreen(
69-
key: ArchSampleKeys.addTodoScreen,
70-
onSave: (task, note) {
71-
todosBloc.add(
72-
AddTodo(Todo(task, note: note)),
73-
);
74-
},
75-
isEditing: false,
76-
);
77-
},
78-
},
79-
);
80-
}
10+
runBlocLibraryApp(LocalStorageRepository(
11+
localStorage: LocalStorage(
12+
'bloc_library',
13+
FlutterKeyValueStore(await SharedPreferences.getInstance()),
14+
),
15+
));
8116
}

bloc_library/lib/main_web.dart

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'dart:html';
2+
3+
import 'package:bloc_library/run_app.dart';
4+
import 'package:flutter/cupertino.dart';
5+
import 'package:key_value_store_web/key_value_store_web.dart';
6+
import 'package:todos_repository_simple/todos_repository_simple.dart';
7+
8+
Future<void> main() async {
9+
WidgetsFlutterBinding.ensureInitialized();
10+
11+
runBlocLibraryApp(LocalStorageRepository(
12+
localStorage: LocalStorage(
13+
'bloc_library',
14+
WebKeyValueStore(window.localStorage),
15+
),
16+
));
17+
}

bloc_library/lib/run_app.dart

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved.
2+
// Use of this source code is governed by the MIT license that can be found
3+
// in the LICENSE file.
4+
5+
import 'package:bloc/bloc.dart';
6+
import 'package:bloc_library/blocs/blocs.dart';
7+
import 'package:bloc_library/localization.dart';
8+
import 'package:bloc_library/models/models.dart';
9+
import 'package:bloc_library/screens/screens.dart';
10+
import 'package:flutter/material.dart';
11+
import 'package:flutter_bloc/flutter_bloc.dart';
12+
import 'package:todos_app_core/todos_app_core.dart';
13+
import 'package:todos_repository_core/todos_repository_core.dart';
14+
15+
void runBlocLibraryApp(TodosRepository repository) {
16+
// BlocSupervisor oversees Blocs and delegates to BlocDelegate.
17+
// We can set the BlocSupervisor's delegate to an instance of `SimpleBlocDelegate`.
18+
// This will allow us to handle all transitions and errors in SimpleBlocDelegate.
19+
BlocSupervisor.delegate = SimpleBlocDelegate();
20+
runApp(
21+
BlocProvider<TodosBloc>(
22+
create: (context) {
23+
return TodosBloc(todosRepository: repository)..add(LoadTodos());
24+
},
25+
child: TodosApp(),
26+
),
27+
);
28+
}
29+
30+
class TodosApp extends StatelessWidget {
31+
@override
32+
Widget build(BuildContext context) {
33+
final todosBloc = BlocProvider.of<TodosBloc>(context);
34+
35+
return MaterialApp(
36+
onGenerateTitle: (context) =>
37+
FlutterBlocLocalizations.of(context).appTitle,
38+
theme: ArchSampleTheme.theme,
39+
localizationsDelegates: [
40+
ArchSampleLocalizationsDelegate(),
41+
FlutterBlocLocalizationsDelegate(),
42+
],
43+
routes: {
44+
ArchSampleRoutes.home: (context) {
45+
return MultiBlocProvider(
46+
providers: [
47+
BlocProvider<TabBloc>(
48+
create: (context) => TabBloc(),
49+
),
50+
BlocProvider<FilteredTodosBloc>(
51+
create: (context) => FilteredTodosBloc(todosBloc: todosBloc),
52+
),
53+
BlocProvider<StatsBloc>(
54+
create: (context) => StatsBloc(todosBloc: todosBloc),
55+
),
56+
],
57+
child: HomeScreen(),
58+
);
59+
},
60+
ArchSampleRoutes.addTodo: (context) {
61+
return AddEditScreen(
62+
key: ArchSampleKeys.addTodoScreen,
63+
onSave: (task, note) {
64+
todosBloc.add(AddTodo(Todo(task, note: note)));
65+
},
66+
isEditing: false,
67+
);
68+
},
69+
},
70+
);
71+
}
72+
}

bloc_library/pubspec.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,14 @@ dependencies:
2323
path: ../todos_app_core
2424
todos_repository_simple:
2525
path: ../todos_repository_simple
26+
todos_repository_core:
27+
path: ../todos_repository_core
2628
meta: ">=1.1.0 <2.0.0"
2729
equatable: ^1.0.2
2830
flutter_bloc: ^3.1.0
31+
key_value_store_flutter:
32+
key_value_store_web:
33+
shared_preferences:
2934

3035
dev_dependencies:
3136
flutter_test:

bloc_library/web/index.html

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>bloc_library</title>
6+
</head>
7+
<body>
8+
<script src="main.dart.js" type="application/javascript"></script>
9+
</body>
10+
</html>

0 commit comments

Comments
 (0)