flutter_bloc 是一个bloc第三方库,这个库很方便的让你集成bloc模式,这个库结合了RXDart,先了解一下bloc 的模式吧

1,widget 触发event 事件

2,bloc 接收event 事件并作出逻辑处理

3 ,并把逻辑处理结果给返回出来

4,UI展示数据

其实它有点像mvvm   ,Event只是出发事件,并不能传值,bloc 接收这个event,根据event去找到具体的方法去处理逻辑,之后把结果返回,如果再不明白,我举个例子,我去饭店吃饭去告诉老板点一个大盘鸡(这个是event),老板根据菜名找到具体的厨师(sink),厨师做好大盘鸡(这是逻辑处理)之后告诉老板做好(state)老板把菜端上来(UI跟数据改变)

flutter_bloc 提供几个api  根据这几个API 就可以快速搭建bloc

BlocBuilder

BlocProvider

BlocProviderTree

BlocListener

BlocListenerTree

BlocBuilder

有三个属性 bloc  condition  builder

BlocBuilder(
bloc: ,这个添加bloc dart
condition: (previousState, currentState){ return true;},//可选默认返回true
builder: (BuildContext context, List state) {}state 返回数据
)。

BlocProvider

这个可以管理全局变量

    BlocProvider(

    bloc:,这个添加bloc dart 把这个bloc 传递其它字界面使用

    child:LogIn(),子类

    )

子widget 通过BlocProvider.of<LogBloc>(context) 获取这个bloc

如果涉及到push 可以通过这种模式传递

    Navigator.push(context, new MaterialPageRoute(

    builder: (Context)=>BlocProvider(

    bloc:LogBloc(),

    child:HomePage1(),

    )));

BlocProviderTree

可以管理多个状态

一个widget 涉及多个state 可以用它管理

BlocProviderTree(
  blocProviders: [
    BlocProvider<BlocA>(bloc: BlocA()),
    BlocProvider<BlocB>(bloc: BlocB()),
    BlocProvider<BlocC>(bloc: BlocC()),
  ],
  child: ChildA(),
)

demo

import 'package:flutter/material.dart';
import 'package:flutter_app/bloc/counter_bloc_demo.dart'; class BlocDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CounterProvider(
bloc: CounterBloc(),
child: Scaffold(
appBar: AppBar(
title: Text('BlocDemo'),
elevation: 0.0,
),
body: CounterHome(),
floatingActionButton: CounterActionButton(),
),
);
}
}
import 'dart:async';

import 'package:flutter/material.dart';

class CounterHome extends StatelessWidget {
@override
Widget build(BuildContext context) {
CounterBloc _counterBloc = CounterProvider.of(context).bloc; return Center(
child: StreamBuilder(
initialData: 0,
stream: _counterBloc.count,
builder: (context, snapshot) {
return ActionChip(
label: Text('${snapshot.data}'),
onPressed: () {
// _counterBloc.log();
_counterBloc.counter.add(1);
},
);
},
),
);
}
} class CounterActionButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
CounterBloc _counterBloc = CounterProvider.of(context).bloc; return FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
// _counterBloc.log();
_counterBloc.counter.add(1);
},
);
}
} class CounterProvider extends InheritedWidget {
final Widget child;
final CounterBloc bloc; CounterProvider({
this.child,
this.bloc,
}) : super(child: child); static CounterProvider of(BuildContext context) =>
context.inheritFromWidgetOfExactType(CounterProvider); @override
bool updateShouldNotify(CounterProvider oldWidget) {
return true;
}
} class CounterBloc {
int _count = 0; final _counterActionController = StreamController<int>();
StreamSink<int> get counter => _counterActionController.sink; final _counterController = StreamController<int>();
Stream<int> get count => _counterController.stream; CounterBloc() {
_counterActionController.stream.listen(onData);
} void onData(int data) {
print('$data');
_count = data + _count;
_counterController.add(_count);
} void disponse() {
_counterActionController.close();
_counterController.close();
} void log() {
print('BLoC');
}
}

Flutter之BLOC的更多相关文章

  1. Flutter Bloc状态管理 简单上手

    我们都知道,Flutter中Widget的状态控制了UI的更新,比如最常见的StatefulWidget,通过调用setState({})方法来刷新控件.那么其他类型的控件,比如StatelessWi ...

  2. Flutter 状态管理之BLoC

    在正式介绍 BLoC之前, 为什么我们需要状态管理.如果你已经对此十分清楚,那么建议直接跳过这一节.如果我们的应用足够简单,Flutter 作为一个声明式框架,你或许只需要将 数据 映射成 视图 就可 ...

  3. flutter Provide 状态管理篇

    Provide是Google官方推出的状态管理模式.官方地址为: https://github.com/google/flutter-provide 现在Flutter的状态管理方案很多,redux. ...

  4. bloc控制读写文件

    import 'package:flutter/material.dart'; import 'dart:io'; import 'package:path_provider/path_provide ...

  5. (转)flutter 新状态管理方案 Provide (一)-使用

    flutter 新状态管理方案 Provide (一)-使用     版权声明:本文为博主原创文章,基于CC4.0协议,首发于https://kikt.top ,同步发于csdn,转载必须注明出处! ...

  6. 基于 Flutter 以两种方式实现App主题切换

    概述 App主题切换已经成为了一种流行的用户体验,丰富了应用整体UI视觉效果.例如,白天夜间模式切换.实现该功能的思想其实不难,就是将涉及主题的资源文件进行全局替换更新.说到这里,我想你肯定能联想到一 ...

  7. 【Flutter】348- 写给前端工程师的 Flutter 教程

    点击上方"前端自习课"关注,学习起来~ | 导语 最爱折腾的就是前端工程师了,从 jQuery 折腾到 AngularJs,再折腾到 Vue.React.最爱跨屏的也是前端工程师, ...

  8. Flutter中高级培训

    Flutter中高级培训 一.简介 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.Flutter可以与现有的代码一起工作.本课程全面介绍Flutter ...

  9. flutter,SliverPersistentHeader实现Tab顶部吸附固定效果

    直接上代码啦 import 'package:flutter/material.dart'; class StickyDemo extends StatefulWidget { @override _ ...

随机推荐

  1. 铁力项目mysql异常处理过程记录

    地区:铁力 故障:2019-06-26 10:19:34 139921514837760 [ERROR] mysqld: Error writing file 'mysql-bin' (errno: ...

  2. trap - 在脚本中处理信号

    一:用途说明 trap命令是shell内建的命令,它用在脚本中指定信号如何处理.  比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是 ...

  3. 分布式调度平台XXL-JOB源码分析-执行器端

    上一篇文章已经说到调度中心端如何进行任务管理及调度,本文将分析执行器端是如何接收到任务调度请求,然后执行业务代码的. XxlJobExecutorApplication为我们执行器的启动项,其中有个X ...

  4. 关于JDBCUtils的模糊查询问题

    1.JDBCUtils的模糊查询问题解决方法 数据库jdbc工具类的模糊查询最核心的就是用like %内容%,但是我们对于界面输入进来的东西都是用?来替代的,那么就代表着我们不能吧%%写在问号旁边.否 ...

  5. KVM虚拟机,如何设置虚拟机的CPU型号与物理机是一样的

    1.在kvm主机上修改配置文件 [root@node160 ~]# virsh edit CentOS-7.3-X86_64 将xml配置文件中的: <cpu mode='custom' mat ...

  6. html页面标记 点击目录跳转到页面相应位置 简易回到顶部

    html页面标记 点击目录跳转到页面相应位置 简易回到顶部  参考博客:

  7. Greenplum failed segment的恢复方法--primary与mirror都可修复

    当在使用greenplum过程中有不当的操作时,可能会出现segment节点宕掉的情况(比如在greenplum运行的过程中停掉其中几台segment节点的服务器),通过下面的方法可以恢复segmen ...

  8. admin站点管理

    admin中的显示 class Saltstack_GroupAdmin(admin.ModelAdmin): list_display = ['group_name','salt_minion_id ...

  9. linux如何实现凌晨定时执行脚本?

    Linux中,周期执行的任务一般由cron这个守护进程来处理.cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“crontab”,是“cron table ...

  10. mac eclipse 创建Java 工程

    首先创建Java工程testjavapro,创建包testjavapro,接着创建类testjava 参考: https://www.jianshu.com/p/20280b850c95