flutter之bloc使用详解

本文介绍了Flutter中使用Bloc和Cubit这两种状态管理库来分离业务逻辑和UI界面,阐述了它们的核心概念(Sink和Stream、事件和状态)、模式差异(BLoC的复杂性和灵活性与Cubit的简洁性),并提供了计数器使用案例和相关小部件如BlocBuilder、BlocSelector和BlocListener的示例。

flutter中一切皆为Widget,因此在我们开发中,往往业务和UI逻辑写在一起,这样不利于代码维护,因此状态管理框架久诞生了,这篇就开始讲一讲Bloc。

对于Bloc库有两个,如下图:
在这里插入图片描述flutter_bloc其实是对bloc的进一步封装,flutter_bloc引入了bloc库和provider库,是对bloc的进一步延伸。

bloc官方文档:https://bloclibrary.dev/#/zh-cn/coreconcepts

一.Bloc介绍

BLoC设计模式:BLoC模式的核心是Sink和Stream,它们用于处理输入和输出。通常,你会创建一个BLoC类,该类接收输入流并根据输入产生输出流。然后,UI组件订阅输出流以接收状态更新,并将用户操作发送到输入流。

Bloc有两种模式:

Bloc模式:该模式划分四层结构
在这里插入图片描述

bloc:逻辑层
state:数据层
event:所有的交互事件
view:页面

Cubit模式:该模式划分了三层结构

在这里插入图片描述

cubit:逻辑层
state:数据层
view:页面

Bloc模式和Cubit模式区别:

  • 复杂度: BLoC:BLoC通常用于管理更复杂的业务逻辑和状态。它可以处理多个事件和多个状态,适用于大型、复杂的应用程序。
    Cubit:Cubit的设计更简单,适用于处理较简单的状态和事件。它更适合于小型和中型应用程序,以及对状态管理模式不太熟悉的开发者。

  • 事件和状态管理: BLoC:在BLoC中,事件和状态是分开管理的,你需要自己编写事件和状态的类,并在BLoC中进行映射。这使得BLoC更加灵活,但也更加复杂。
    Cubit:Cubit将事件和状态合并到一个类中,称为Cubit类。这使得代码更加简洁,但在处理复杂的事件和状态时可能会变得混乱。

  • 异步支持: BLoC:BLoC天生支持异步操作,可以轻松处理异步任务,例如网络请求。这是因为BLoC的mapEventToState方法可以返回Stream。
    Cubit:Cubit也支持异步操作,但需要使用Emit函数来发射新的状态。

二.flutter_bloc简单使用

导入库:

flutter_bloc: ^8.1.3

这是一个插件,可选择使用,简化模版代码生成。安装flutter_bloc插件
在这里插入图片描述

使用案例:计数器

import 'package:flutter_bloc/flutter_bloc.dart';

// 定义事件
enum CounterEvent {
   
    increment, decrement }

class CounterBloc extends Bloc<CounterEvent, int> {
   
   
  CounterBloc() : super(0);

  
  Stream<int> mapEventToState(CounterEvent
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值