Flutter Bloc之简单记录

目录

0.库安装

1.插件和自动生成

2.状态的配置

1.初始化中:

2.赋值完成后:

3.如果出错:

3.事件的配置

1.定义一个读取事件

2.定义一个更改事件

4.Bloc的设置

5.Bloc的使用

1.BlocProvider

2.内部调用


参考文章进行类的配置

0.库安装

首先需要安装bloc相关的两个库flutter_bloc和equatable。

1.插件和自动生成

我使用的是Android Studio,首先在插件市场安装Bloc,可以用来快速生成bloc类

bloc插件

 在bloces文件目录下新建想要创建的类名,右键New->Bloc Class

输入想创建的类名,选择equatable即可

 

 最终插件会在该目录下自动生成3个文件

 分别是:

test_bloc.dart:管理bloc的整体配置;

test_event.dart:管理bloc数据对应所需要处理的事件;

test_state.dart:管理bloc数据所存在的状态

2.状态的配置

先配置密封状态类,密封类必定抽象,无法在外部被继承且可以被switch选择

sealed class TestState extends Equatable {const TestState();
}

首先,可以配置我们认为bloc数据所可能存在的状态

1.初始化中:

/// 初始化数据,该状态无返回值
final class TestInitial extends TestState {@overrideList<Object> get props => [];
}

2.赋值完成后:

/// 初始化完成,该状态要返回赋值的值
class TestInitialed extends TestState {final Object? value;const TestInitialed({this.value = Object});@overrideList<Object?> get props => [value];
}

3.如果出错:

/// 显示错误情况
class TestError extends TestState{@overrideList<Object> get props => [];
}

以上简单配置了3种赋值的简单情况。

最终test_state.dart的内容为:

part of 'test_bloc.dart';sealed class TestState extends Equatable {const TestState();
}/// 初始化数据,该状态无返回值
final class TestInitial extends TestState {@overrideList<Object> get props => [];
}/// 初始化完成,该状态要返回赋值的值
class TestInitialed extends TestState {final Object? value;const TestInitialed({this.value = Object});@overrideList<Object?> get props => [value];
}/// 显示错误情况
class TestError extends TestState{@overrideList<Object> get props => [];
}

3.事件的配置

同理先配置事件的密封类

/// 密封类,必定抽象,无法在外部继承,可以被 switch 选择
sealed class TestEvent extends Equatable {const TestEvent();
}

1.定义一个读取事件

/// 获取信息事件
class LoadTestData extends TestEvent {@overrideList<Object> get props => [];
}

2.定义一个更改事件

/// 更改信息事件
class ChangeTestData extends TestEvent {final Object value;const ChangeTestData(this.value);@overrideList<Object> get props => [value];
}

最终test_event.dart的内容为:

part of 'test_bloc.dart';/// 密封类,必定抽象,无法在外部继承,可以被 switch 选择
sealed class TestEvent extends Equatable {const TestEvent();
}/// 获取信息事件
class LoadTestData extends TestEvent {@overrideList<Object> get props => [];
}/// 更改信息事件
class ChangeTestData extends TestEvent {final Object value;const ChangeTestData(this.value);@overrideList<Object> get props => [value];
}

4.Bloc的设置

Bloc类TestBloc继承Bloc<TestEvent, TestState>,并且在初始化时为TestInitial()状态,然后谁知它在不同事件中的不同状态下的情况,这里定义前文中两个事件会对应发生的情况:

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';part 'test_event.dart';
part 'test_state.dart';class TestBloc extends Bloc<TestEvent, TestState> {TestBloc() : super(TestInitial()) {/// 定义读取事件发生时不同状态的情况on<LoadTestData>((event, emit) async {emit(TestInitial());try{await Future<void>.delayed(const Duration(seconds: 1));/// 正常应该是拉取到的信息const _value = Object();emit(const TestInitialed(value: _value));}catch(_){emit(TestError());}});on<ChangeTestData>((event, emit) async {emit(TestInitial());try{await Future<void>.delayed(const Duration(seconds: 1));/// 正常应该是拉取到的信息const _value = Object();emit(const TestInitialed(value: _value));}catch(_){emit(TestError());}});}
}

5.Bloc的使用

1.BlocProvider

在需要使用该Bloc的范围外,用BlocProvider进行包裹,BlocProvider本身可以嵌套使用。使用方法如下:

BlocProvider<TestBloc>(create: (_) => TestBloc()..add(LoadTestData()),child: Container(),)

其中..add是对Bloc的一次初始化启动,所以先进行值的加载,括号内的事件即是想要做的事件

2.内部调用

在这个包裹的树内,可以使用如下代码调用对应Bloc的事件函数进行相应的操作:

BlocProvider.of<TestBloc>(context).add(ChangeTestData(_value));

综上,大致的使用就是这样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSS题目练习7

[MoeCTF 2022]baby_file 打开看见一串源代码&#xff0c;需要get传参传入file 题目提示php伪协议 用dirsearch扫描发现flag.php 用php伪协议查看&#xff0c;回显一串base64编码 解码后得到flag [鹤城杯 2021]Middle magic 读取这两个文件 一个php正则表达式 补充&#xff1a…

解锁ArrayBlockingQueue奥秘:深入源码的精彩之旅

1.简介 ArrayBlockingQueue 是 BlockingQueue 接口的一个实现类&#xff0c;它基于数组实现了一个有界阻塞队列。创建 ArrayBlockingQueue 实例时需要指定队列的容量&#xff0c;队列的大小是固定的&#xff0c;无法动态增长。 主要特点包括&#xff1a; 有界性&#xff1a;A…

anaconda 多环境配置

1、查看所有的环境 conda info --envs 2、创建新的环境如python 3.10版本&#xff0c;-n 是name 的简写 conda create -n py3.10 python3.10 3、激活3.10环境 conda activate py3.10 4、退出当前环境 conda deactivate

sentaurus报错记录1

设置(sde:set-process-up-direction "0") 或者(sde:set-process-up-direction "z") 运行后报错 sde:set-process-up-direction: wrong argument type string (expected integer) 可能原因&#xff1a;版本问题导致&#xff0c;注释掉后运行结果正常

空对象模式

空对象模式 空对象模式(Null Object Pattern)是一种设计模式,用于解决在某些情况下不需要实例化具体的对象,而是返回一个“空”对象,这样可以简化代码、避免 NullPointerException 和提高程序的可读性和维护性。简单来说,”空对象模式“就是本该返回None值或抛出异常时,…

STM32——hal_SPI_(介绍)

SPI&#xff08;串行外围设备接口&#xff09;是一种高速的、全双工、同步的通信协议&#xff0c;通常用于短距离通信&#xff0c;尤其是在嵌入式系统中与各种外围设备进行通信。SPI接口由摩托罗拉公司推出&#xff0c;由于其简单和灵活的特性&#xff0c;它被广泛用于多种应用…

2023年计算机图形学课程知识总结

去年就该写的&#xff0c;但是去年这个时候太忙了。 就写来自己看看。留个记录留个念 文章目录 1. 图形&#xff0c;图像的定义2. 点阵、矢量3. 走样&#xff0c;反走样4. 字符裁剪精度&#xff08;1&#xff09; 串精度&#xff08;2&#xff09; 字符精度&#xff08;3&…

外界的声音都是参考,你不开心就不要参考

在纷繁复杂的世界中&#xff0c;我们每天都会接收到来自四面八方的声音和建议。这些声音可能来自家人、朋友、同事&#xff0c;甚至是社交媒体上的陌生人。然而&#xff0c;在这众多的声音中&#xff0c;我们如何找到自己的方向&#xff0c;保持内心的平静和快乐呢&#xff1f;…

SpringBoot打war包并配置外部Tomcat运行

简介 由于其他原因&#xff0c;我们需要使用SpringBoot打成war包放在外部的Tomcat中运行,本文就以一个案例来说明从SpringBoot打war包到Tomcat配置并运行的全流程经过 环境 SpringBoot 2.6.15 Tomcat 8.5.100 JDK 1.8.0_281 Windows 正文 一、SpringBoot配置打war包 第一步&a…

手机兼职骗局花样多,5款常见骗局!

手机兼职骗局花样繁多&#xff0c;以下是五个常见的手机兼职骗局&#xff1a; 1. 打字骗局&#xff1a;如快递录入兼职、陪聊兼职等&#xff0c;这些兼职通常通过免费、高收入等诱惑吸引求职者。一旦求职者上钩&#xff0c;骗子会要求缴纳保证金、入会费等&#xff0c;最终求职…

J-Lin烧录

1、J-linK介绍 J-Link是由德国SEGGER公司推出的&#xff0c;主要用于支持仿真ARM内核芯片的JTAG仿真器。它支持JTAG和SWD两种模式&#xff0c;可以配合多种集成开发环境&#xff08;如IAR EWAR, ADS, KEIL, WINARM, RealView等&#xff09;使用&#xff0c;支持ARM7/ARM9/ARM…

odoo16 档案管理

档案管理&#xff0c;odoo15升级至odoo16完善 电子档案管理是指将传统纸质档案数字化&#xff0c;以便更加方便、快捷、安全地进行档案管理。电子档案管理系统可以对档案进行数字化、存储、检索、共享、传递和销毁等操作&#xff0c;从而提高了档案管理的效率和准确性&#xf…

使用cesiumLab使shp转为3dtlies

过程不做赘述&#xff0c;网上大把&#xff0c;说下注意事项。 1. 存储3DTiles 选项 若是打开则输出的文件为glb格式文件,因为glb文件好储存易传输跨平台。cesium可以使用但无法处理&#xff0c;例如改变颜色&#xff0c;改着色器等。若是不打开则输出的文件为bm3d格式文件,此…

Bond网卡

一、Bond网卡 1.1 Bond网卡概述 Bond网卡是指使用 Linux 系统中的 Bonding 技术创建的虚拟网络接口。 Bonding 技术允许将多个物理网卡&#xff08;也称为接口或端口&#xff09;绑定在一起&#xff0c;形成一个虚拟的网络接口&#xff0c;以增加网络带宽、提高网络容错性和…

表达式求值中的“整型提升”概念

一.基本原理和概念 如&#xff1a;代码 char a&#xff0c;b&#xff0c;c &#xff1b; a b c &#xff1b; 该代码在计算的时候就会先将 b 和 c 提升为 int 类型进行加法后&#xff0c;再将数据进行截断存放在内存存放变量 a 的空间中。 &#xff08;1&#xff09;提升和截…

删除临时表报ORA-14452错误解决方法

跑存储过程&#xff0c;里面有张临时表。跑完后打算删除临时表报ORA-14452&#xff1a;An attempt was made to create, alter or drop an index on te 跑存储过程&#xff0c;里面有张临时表。跑完后打算删除临时表报ora-14452&#xff1a;an attempt was made to create, alt…

眼底照 + OCT图 + 精神状态 ,预测阿尔兹海默症

眼底照片和OCT图像&#xff0c;预测阿尔兹海默症 数据多模态网络模型集成可视化分析 论文&#xff1a;https://www.ophthalmologyretina.org/action/showPdf?piiS2468-6530%2824%2900045-9 目前&#xff0c;认知障碍的诊断依赖于血清和蛋白质生物标志物的检测、脑脊液检查和正…

【教程】WordPress主题子比主题 添加私密评论功能

教程如下 打开子比主题的 functions.php 文件,在最后一个 ?> 的前面添加以下代码: //私密评论 function liao_private_message_hook( $comment_content , $comment){$comment_ID = $comment->comment_ID; $parent_ID = $comment->comment_parent; $parent_emai…

回溯算法复原ip,子集1和子集2

先做一个总结吧&#xff1a;今天三题里面有两题是纯手工自己完成的&#xff0c;并且三题的总和时长不到两个小时&#xff0c;这个成绩我还是很满意的。下面就来复盘一下吧 首先第一题&#xff08;也是唯一一道看了题解的&#xff09; 题目&#xff1a; 有效 IP 地址 正好由四…

[SaaS] AI+数据,tiktok选品,找达人,看广告数据

TK观察专访丨前阿里“鲁班”创始人用AIGC赋能TikTok获千万融资用AI数据做TikTokhttps://mp.weixin.qq.com/s/xp5UM3ROo48DK4jS9UBMuQ主要还是爬虫做数据的。 商家做内容&#xff1a;1.找达人拍内容&#xff0c;2.商家自己做原生自制内容&#xff0c;3.广告内容。 短视频&…