Skip to content

Commit 319278e

Browse files
author
biranwangxinlei
committed
update bloc demo
1 parent a6e46f3 commit 319278e

File tree

11 files changed

+251
-521
lines changed

11 files changed

+251
-521
lines changed
+23-33
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,27 @@
1+
import 'package:bloc_demo/rxdart/top_page.dart';
12
/**
23
* 切换注释查看single_global_instance / scoped模式的BLoC demo
34
* 有两个地方需要切换,一个是导入的top_page要切换,另外一个是MyApp要切换
45
*/
56
import 'package:flutter/material.dart';
6-
//单例
7-
//import 'package:bloc_demo/single_global_instance/top_page.dart';
8-
//scoped
9-
//import 'package:bloc_demo/scoped/top_page.dart';
10-
//import 'package:bloc_demo/scoped/blocs/bloc_provider.dart';
11-
//rxdart
12-
import 'package:bloc_demo/rxdart/blocs/bloc_provider.dart';
13-
import 'package:bloc_demo/rxdart/top_page.dart';
14-
157

168
void main() => runApp(MyApp());
179

1810
/**
1911
* scoped 入口
2012
*/
21-
class MyApp extends StatelessWidget {
22-
@override
23-
Widget build(BuildContext context) {
24-
return BlocProvider(
25-
child: MaterialApp(
26-
title: 'scoped',
27-
theme: ThemeData.dark(),
28-
home: TopPage(),
29-
),
30-
);
31-
}
32-
}
13+
//class MyApp extends StatelessWidget {
14+
// @override
15+
// Widget build(BuildContext context) {
16+
// return BlocProvider(
17+
// child: MaterialApp(
18+
// title: 'scoped',
19+
// theme: ThemeData.dark(),
20+
// home: TopPage(),
21+
// ),
22+
// );
23+
// }
24+
//}
3325

3426
/**
3527
* single_global_instance 入口
@@ -48,15 +40,13 @@ class MyApp extends StatelessWidget {
4840
/**
4941
* rxdart 入口
5042
*/
51-
//class MyApp extends StatelessWidget {
52-
// @override
53-
// Widget build(BuildContext context) {
54-
// return BlocProvider(
55-
// child: MaterialApp(
56-
// title: 'rxdart',
57-
// theme: ThemeData.dark(),
58-
// home: TopPage(),
59-
// ),
60-
// );
61-
// }
62-
//}
43+
class MyApp extends StatelessWidget {
44+
@override
45+
Widget build(BuildContext context) {
46+
return MaterialApp(
47+
title: 'rxdart',
48+
theme: ThemeData.dark(),
49+
home: TopPage(),
50+
);
51+
}
52+
}

mecury_project/example/bloc_demo/lib/rxdart/blocs/bloc_provider.dart

-14
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
1-
import 'package:rxdart/rxdart.dart';
21
import 'dart:async';
32

4-
class CountBLoC {
5-
int _count = 0;
6-
var _subject = BehaviorSubject<int>();
7-
8-
Stream<int> get stream => _subject.stream;
9-
int get value => _count;
10-
11-
void increment() => _subject.add(++_count);
12-
13-
void dispose() {
14-
_subject.close();
15-
}
3+
abstract class CountBloc {
4+
Stream<int> get stream;
5+
int get value;
6+
void increment();
7+
void dispose();
168
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'package:rxdart/rxdart.dart';
2+
3+
import 'count_bloc.dart';
4+
5+
class CountBLoCImpl implements CountBloc {
6+
int _count = 0;
7+
var _subject = BehaviorSubject<int>();
8+
9+
Stream<int> get stream => _subject.stream;
10+
int get value => _count;
11+
12+
void increment() => _subject.add(++_count);
13+
14+
void dispose() {
15+
_subject.close();
16+
}
17+
}

mecury_project/example/bloc_demo/lib/rxdart/top_page.dart

+20-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
1+
import 'package:bloc_demo/rxdart/blocs/count_bloc_impl.dart';
12
import 'package:flutter/material.dart';
2-
import 'package:bloc_demo/rxdart/blocs/bloc_provider.dart';
3+
34
import 'under_page.dart';
45

5-
class TopPage extends StatelessWidget {
6+
class TopPage extends StatefulWidget {
67
@override
7-
Widget build(BuildContext context) {
8-
final bloc = BlocProvider.of(context);
8+
_TopPageState createState() => _TopPageState();
9+
}
910

11+
class _TopPageState extends State<TopPage> {
12+
final bloc = CountBLoCImpl();
13+
14+
@override
15+
void dispose() {
16+
bloc?.dispose();
17+
super.dispose();
18+
}
19+
20+
@override
21+
Widget build(BuildContext context) {
1022
return Scaffold(
1123
appBar: AppBar(
1224
title: Text('Top Page'),
@@ -24,8 +36,10 @@ class TopPage extends StatelessWidget {
2436
),
2537
floatingActionButton: FloatingActionButton(
2638
child: Icon(Icons.navigate_next),
27-
onPressed: () =>
28-
Navigator.of(context).push(MaterialPageRoute(builder: (context) => UnderPage()))),
39+
onPressed: () => Navigator.of(context).push(MaterialPageRoute(
40+
builder: (context) => UnderPage(
41+
bloc: bloc,
42+
)))),
2943
);
3044
}
3145
}

mecury_project/example/bloc_demo/lib/rxdart/under_page.dart

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import 'package:flutter/material.dart';
2-
import 'package:bloc_demo/rxdart/blocs/bloc_provider.dart';
2+
3+
import 'blocs/count_bloc.dart';
34

45
class UnderPage extends StatelessWidget {
6+
final CountBloc bloc;
7+
8+
UnderPage({@required this.bloc});
9+
510
@override
611
Widget build(BuildContext context) {
7-
final bloc = BlocProvider.of(context);
8-
912
return Scaffold(
1013
appBar: AppBar(
1114
title: Text('Under Page'),

mecury_project/example/bloc_provider_pattern/.idea/codeStyles/Project.xml

+109-25
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mecury_project/example/bloc_provider_pattern/.idea/libraries/Dart_SDK.xml

+21-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)