- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个问题,即对 cubit 的流订阅不监听 cubit 的发射状态。这是我如何在我的代码中实现它们的示例。
这是我想听的肘
class ButtonPressCubit extends Cubit<ButtonState> {
ButtonPressCubit() : super(ButtonNotPressed());
void emitButtonOnePressed() => emit(ButtonOnePressed());
void emitButtonTwoPressed() => emit(ButtonTwoPressed());
}
part of 'internet_cubit.dart';
@immutable
abstract class ButtonState {}
class ButtonNotPressed extends ButtonState {}
class ButtonOnePressed extends ButtonState {}
class ButtonTwoPressed extends ButtonState {}
这是我想订阅的肘,我想听的肘。
class CounterCubit extends Cubit<CounterState> {
final ButtonPressCubit buttonPressCubit;
StreamSubscription buttonPressStreamSubscription;
CounterCubit({@required this.internetCubit})
: super(CounterState(counterValue: 0, wasIncremented: false)) {
buttonPressStreamSubscription = buttonPressCubit.listen(print);
}
void increment() => emit(
CounterState(counterValue: state.counterValue + 1, wasIncremented: true));
void decrement() => emit(CounterState(
counterValue: state.counterValue - 1, wasIncremented: false));
@override
Future<void> close() {
buttonPressStreamSubscription.cancel();
return super.close();
}
}
之后,我调用了 ButtonPressCubit emitButtonOnePressed()
,如下所示。
MaterialButton(
child: Text('Buton 2'),
onPressed: () {
BlocProvider.of<ButtonPressCubit>(context)
.emitButtonTwoPressed();
},
),
但这行不通。如何修复它以获得肘的状态。
最佳答案
如果您在启动之前没有注册该小部件的 Cubit,您应该注册
这就像告诉 flutter 这个 Cubit 是针对这个页面的,并且有一些方法可以做到这一点
首先:如果您有多个 Bloc 或
MultiBlocProvider(
providers: [
//other Blocs or Cubits
BlocProvider<XCubit>(
create: (BuildContext context) => XCubit(),
child: XWidget(),
),
//other Blocs or Cubits
],
child: MaterialApp(),....);
第二:在文档中
class _AppState extends State<App> {
final UserRepository _userRepository = UserRepository();
AuthenticationBloc _authenticationBloc;
@override
void initState() {
super.initState();
_authenticationBloc = AuthenticationBloc(userRepository: _userRepository);
_authenticationBloc.dispatch(AppStarted());
}
@override
Widget build(BuildContext context) {
return BlocProvider(
bloc: _authenticationBloc,
child: MaterialApp(
home: BlocBuilder(
bloc: _authenticationBloc,
builder: (BuildContext context, AuthenticationState state) {
//here is your widget you want to run
return Container();
},
),
),
);
}
但请记住,您应该在启动/运行小部件之前执行此操作
通常我像第一种方法一样在开始时定义所有的 Blocs 和 Cubits.. 在任何其他小部件运行之前开始。
这是您应该关心的另一件事,但是如果您使用的是 Bloc 而不是 Cubit,那么这件事是您实现了 Bloc
{Listener,Builder..}在您的小部件中以便您可以看到更改
BlocBuilder<AddNewStudentBloc, AddNewStudentState>(
builder: (context, state) {
//here you do respond for the state like
// if State is Error return ErrorWidget
// else if the state is Success return SuccessWidget
// and so on....
return Container(); },
);
关于flutter - 如何在 Flutter Cubit 中使用 StreamSubscription,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67137656/
我是 flutter 和块的新手。事实上,我最近才开始使用 cubit。出于学习目的,我创建了一个简单的应用程序,在其中使用 cubit 来实现 bloc 功能。在我在网上找到的所有示例中,他们建议在
我正在学习 cubit/bloc 但是当我有一个从 json 文件加载信息的页面时,我的状态不会改变。 我不知道发生了什么,因为它不会返回任何错误,但通过打印我可以遵循当前状态。 我也没有找到使用这种
我正在创建一个 Flutter 应用程序。我在我的项目中添加了一个 BloC 来管理状态。我创建了一个包含数据的列表。我想使用“添加”按钮手动将项目添加到 ListView。 我写了一段代码: 我的项
我在 Flutter 工作了很长时间,并且有很多已发布的产品。我从来不喜欢 BLoC,更喜欢使用 Provider 或后来的 Riverpod。 我只是不明白那个事件的概念。为什么我们还需要它?我很困
更新找到 onChange 覆盖方法后,似乎没有发出更新的状态#confused 更新 2 进一步调试显示,当更新状态尝试发出时,StreamController 似乎已关闭。 出于某种原因,我的应用
我遇到了一个问题,即对 cubit 的流订阅不监听 cubit 的发射状态。这是我如何在我的代码中实现它们的示例。 这是我想听的肘 class ButtonPressCubit extends Cub
Bloc 相对于 Cubit 的实际优势是什么? 除了可追溯性(您也可以通过适当的 Cubit 日志记录来实现)和高级事件转换(我想不出任何“高级”事件Cubit 无法执行的转换,因为总有一种方法可以
TL;博士:有没有办法使用 Cubit 来监听流并发出状态而不是 BLoC ? 我正在使用 BLoC Flutter 库,我们使用 Cubit s 用于我们的状态管理。到目前为止,一切正常,用于获取数
我是新来的。目前我使用 bloc 来帮助我。 当我在 UI 中使用 bloc 时,我总是得到 'LoginBloc' doesn't extend 'Cubit'我用过依赖flutter_bloc 这
当我正常运行我的应用程序时,我执行 cubit.getWeather('London')并且 weatherLoading 状态发出,然后 weatherLoaded 状态正确发出。 然而,当我为肘部
以下是来自的示例代码: https://bloclibrary.dev/#/flutterbloccoreconcepts 我收到以下异常, 如何修复以下异常以及为什么会发生这种情况: ═══════
我的应用程序的主菜单中有 10 个按钮,每个按钮都包含其中的 BlocBuilder。 所以当我点击这些按钮打开一个新页面时,我想调度第一个事件,但我不知道如何。我可以将所有类更改为有状态小部件,然后
在使用 BLoC 库时,我们将所有变量存储在一个状态类中。但是在哪里存储TextEditingController,它不会改变,但它的值会改变? 假设我有一个这样的状态类(仅作为示例): @freez
我是一名优秀的程序员,十分优秀!