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…

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&…

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…

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;提升和截…

眼底照 + 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…

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

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

南京观海微电子----焊机用DC-DC 24V 升压电路分析

焊机用DC-DC 24V 升压电路分析 辅电升压电路关键元件有&#xff1a;UC3843、电感、MOS功率管、整流二极管等组成。其核心是UC3843。UC3843是脉宽调制IC&#xff0c;工作频率可达500kHz&#xff0c;组成电路引脚少、外围元件简单&#xff0c;启动电流仅需1mA&#xff0c;开启电压…

BC C language

题目汇总 No.1 打印有规律的字符(牛牛的字符菱形) 代码展示 #include<stdio.h> int main() {char ch=0;scanf("%c"

Meta Llama 3 残差结构

Meta Llama 3 残差结构 flyfish 在Transformer架构中&#xff0c;残差结构&#xff08;Residual Connections&#xff09;是一个关键组件&#xff0c;它在模型的性能和训练稳定性上起到了重要作用。残差结构最早由He et al.在ResNet中提出&#xff0c;并被广泛应用于各种深度…

ArUco与AprilTag 标签

一、简介 在许多计算机视觉应用程序中&#xff0c;姿势估计非常重要&#xff1a;机器人导航&#xff0c;增强现实等等。 该过程基于发现真实环境中的点与其2d图像投影之间的对应关系。 这通常是一个困难的步骤&#xff0c;因此通常使用合成或基准标记来简化操作。 最受流行的…

Day13 配置AutoMapper关系映射

在上一节 中,无论ToDoController 控制器,或 IToDoService 服务的接口中,方法的实参必须是传实体类。但在实际开发过程中,这样是不允许的。标准且规范的做法是,定义一个数据传输层,即DTO层。 DTO(Data Transfer Objects)数据传输对象,它是一种设计模式,主要用于在不同…

【机器学习-09】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之高斯混合sklearn.mixture模块研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【全网唯一】触摸精灵iOS版纯离线本地文字识别插件

目的 触摸精灵iOS是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但触摸精灵的图色功能比较单一&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要…