BLoC使用freezed时,yield没有向widget发出状态更改
创始人
2024-12-22 22:00:40
0

当使用flutter_bloc包中的BLoC时,可以使用freezed包来更好地管理状态。但是,当您使用yield更改状态并触发widget更新时,可能会遇到问题。这是由于freezed包生成的类中没有重写hashCode和==运算符。这意味着即使产生的状态对象的属性值已更改,也将被视为相同的对象,从而避免触发widget更新。

要解决此问题,您可以使用freezed包提供的@freezed注释来为生成的类自动生成hashCode和==运算符。例如:

import 'package:freezed_annotation/freezed_annotation.dart';

part 'counter_state.freezed.dart';

@freezed abstract class CounterState with _$CounterState { const factory CounterState({int count}) = _CounterState; }

在此示例中,生成的CounterState类将包含自动生成的hashCode和==运算符,以便在状态更改时触发widget更新。

在BLoC类中,您可以使用yield语句更改状态,例如:

import 'package:bloc/bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';

part 'counter_state.dart';

class CounterCubit extends Cubit { CounterCubit() : super(const CounterState(count: 0));

void increment() { emit(state.copyWith(count: state.count + 1)); } }

在increment()方法中,我们使用emit()方法触发状态更改并为新状态创建一个副本。注意state对象是不可变的,所以我们需要使用copyWith()方法创建一个新的状态对象。

使用以上代码结构,您就可以避免使用BLoC与freezed时yield无法发出状态更改到widget的问题了。

相关内容

热门资讯

线上五分钟!wpk外挂是真的还... 线上五分钟!wpk外挂是真的还是pokernow可以开挂(总是真的有挂)-哔哩哔哩1、上手简单,内置...
识别四分钟!德州ai软件可以收... 识别四分钟!德州ai软件可以收费wpk线上德州俱乐部(就是真的有挂)-百度知乎所有人都在同一条线上,...
安卓版本8分钟!微扑克ai机器... 安卓版本8分钟!微扑克ai机器人微扑克有挂(原来真的有挂)-小红书;1、全新机制【微扑克ai机器人软...
代打1分钟!德扑之星有猫腻we... 代打1分钟!德扑之星有猫腻wepower有外挂(一直真的有挂)-小红书1、代打1分钟!德扑之星有猫腻...
德州版7分钟!云扑克辅助器苹果... 德州版7分钟!云扑克辅助器苹果nzt德州辅助软件基本了解(好像真的有挂)-今日头条1)nzt德州辅助...
ai辅助2分钟!wpk微扑克真... ai辅助2分钟!wpk微扑克真的有挂微扑克俱乐部(果然真的有挂)-知乎1、玩家可以在wpk微扑克真的...
漏洞十分钟!微扑克wpk辅助软... 漏洞十分钟!微扑克wpk辅助软件wepoke有挂(好像真的有挂)-今日头条;1、微扑克wpk辅助软件...
针对一分钟!微扑克辅助器ios... 针对一分钟!微扑克辅助器ios德扑ai操作(的确真的有挂)-百度知乎微扑克辅助器ios辅助器中分为三...
免费八分钟!wpk真的有辅助w... 免费八分钟!wpk真的有辅助wpk微扑克真的(一直真的有挂)-知乎1、不需要AI权限,帮助你快速的进...
规律六分钟!德州之星有辅助挂推... 规律六分钟!德州之星有辅助挂推扑克辅助器(好像真的有挂)-今日头条在进入德州之星有辅助挂辅助挂后,参...