在中有个新概念:BLOC
它是一种利用 方式构建应用的方法,这是一个由流构成的完全异步的世界 。先解释一下什么是流
流:
即,用现实生活的例子就是一个带有两端的管道,只有一个允许在其中插入一些东西 。当你将某物插入管道时,它会在管道内流动并从另一端流出 。
其实它是为处理异步事件而生的 。
很像观察者模式,有个监听者一直监听着出口,一旦有改变的数据流出,就做出业务改变 。也很像vue的双向数据绑定 。
BLoC:
BLoC是一种利用 方式构建应用的方法,这是一个由流构成的完全异步的世界 。
实现
下面的例子其实都是中的例子,单纯想记录一下
1. main.dart:
import 'package:flutter/material.dart';import 'package:flutter_bloctest/BlocProvider.dart';import 'package:flutter_bloctest/TopPage.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget{//statelessWidget是没有状态的控件,与statefulWidget相对@overrideWidget build(BuildContext context) {return BlocProvider(//BlocProvider是自己写的代码child: MaterialApp( //继承自StatefulWidget,一个封装了很多所必须要的组件的小部件,一般作为顶层widget使用title: 'scoped',theme: ThemeData.dark(),home: TopPage(),//一般在MaterialApp的home我们会放一个Scaffold,可以看到TopPage就是return一个Scaffold的),);}}
.dart:
import 'dart:async';import 'package:flutter/material.dart';//创建一个blocclass CountBLoC {int _count;StreamController
![一 Flutter学习 状态管理](http://img.gansulong.com/230720/153240L05-0.png)
文章插图
.dart:
import 'package:flutter/material.dart';import 'CountBLoC.dart';/*InheritedWidget是Flutter的一个功能型的Widget基类,它能有效地将数据在当前Widget树中向它的子widget树传递 。*/class BlocProvider extends InheritedWidget {@overrideCountBLoC bloc = CountBLoC();BlocProvider({Key key, Widget child}) : super(key: key, child: child);//用于控制刷新时机@overridebool updateShouldNotify(InheritedWidget oldWidget) {// TODO: implement updateShouldNotifyreturn false;}/*of方法,用于获取到bloc它的子Widget树可以通过 BuildContext.inheritedFromWidgetOfExactType()方法获得最近的指定类型的Inherited widget,进而获取它的共享数据*/static CountBLoC of(BuildContext context) =>(context.inheritFromWidgetOfExactType(BlocProvider) as BlocProvider).bloc;}
4. .dart:
import 'package:flutter/material.dart';import 'package:flutter_bloctest/BlocProvider.dart';import 'package:flutter_bloctest/UnderPage.dart';class TopPage extends StatelessWidget {@overrideWidget build(BuildContext context) {// TODO: implement buildfinal bloc = BlocProvider.of(context);//检索blocreturn Scaffold(appBar: AppBar(title: Text('Top Page'),),body: Center(/*StreamBuilder其实是一个StatefulWidget,它通过监听stream,发现有数据输出时,自动重建,调用builder方法*/child: StreamBuilder
- 这才是真实的和珅:竟是一位十分出色的政治家
- 壬寅宫变嘉靖逃过一劫后妃再侍寝需脱光
- 残唐五大猛将:四位勇冠三军一位盖世无双
- 钙尔美能和氢**铜一起用吗?你好
- 什么游戏一天赚1000块,玩网络游戏一天可以赚到10元吗?
- macOS自带网络测速功能使用教程
- 解密:李鸿章与日本石川伍一之间的间谍案真相
- 明朝发现一古墓神秘到朱元璋都不敢随便挖开
- 一代女皇武则天的情人们:人数之众多竟是空前绝后
- 明英宗的儿子朱见深为何从一代明君变成暴君