我只是在一瞬间就知道了一肘。我在教程视频中学习,因此在该视频中,导师制作了一个登录页面,其中包含电子邮件和密码文本字段以及一个登录按钮。在该视频中,导师仍然使用旧版本的 flutter_bloc。当我遵循其中一行代码时出现警告
child: ElevatedButton(
onPressed: () {
context.watch<AuthCubit>().signIn(
_emailController.text,
_passwordController.text);
}
Run Code Online (Sandbox Code Playgroud)
该代码写在 onPressed 函数按钮内。它说这context.bloc已被弃用。当我尝试运行该应用程序时,它返回一个错误,因为我使用的 flutter_bloc 版本不支持空安全,因此我将其升级到当前版本(7.3.1),我在版本 6.1.0 变更日志中找到了这一点(你可以看到它在flutter_bloc 更改日志中)
deprecated: context.bloc in favor of context.read and context.watch
Run Code Online (Sandbox Code Playgroud)
因为我不知道区别,所以我只是更改context.bloc为context.watch然后再次运行该应用程序,它返回另一个错误
Tried to listen to a value exposed with a provider, from outside of the widget tree.
This is likely caused by an event handler (like a button's onPressed) that called
Provider.of without passing `listen: false`.
To fix, write:
Provider.of<AuthCubit>(context, listen: false);
It is unsupported …Run Code Online (Sandbox Code Playgroud) 我有一个对话框,我将其包装在 blocbuilder 中以根据状态类型更新它,但该对话框只是第一次构建,在状态更改后它不会重建。
showDialog(
context: context,
builder: (_) {
BlocBuilder<ExampleCubit, ExampleState>(
bloc: cubit,
builder: (context, state) {
return CustomDialog(
title:"title",
onSave: (File file) {
cubit.uploadImage(file);
},
progress: (state is ExtendedExampleState)? state.progress:0,
onDelete: () {},
onCancel: () {
cubit.cancelUploading();
},
);
},
);
Run Code Online (Sandbox Code Playgroud)
注意:使用 Bloc 模式很重要StateFulBuilder。
我正在开发一个使用肘节来管理状态的应用程序。很多时候,当我需要发出 API 请求时,我需要获取当前的本地化信息(处理可能的异常),然后将其发送到后端。所以我想我应该使用肘来请求并获取当前的本地化。
我的问题是我应该如何处理?我可以gpsLocalizationCubit从另一肘处打电话吗?我应该使用 bloc 侦听器进行调用gpsLocalizationCubit并成功调用吗?requestCubit但是,那么我应该如何管理对于获取本地化和 API 请求都应该可见的加载屏幕呢?另一个问题是我在单个视图中有多个类似的请求(需要使用当前本地化)。
我想更改肘部的布尔值,但我不知道该怎么做。
我想要实现的是,例如: if (以立方位存储的布尔值为 true) "show widget A" : "show widget B"
我的代码:
class ChangeBoolCubit extends Cubit<bool> {
ChangeBoolCubit() : super(false);
bool one = false;
bool two = true;
void changeValue(bool booleanToChange) {
booleanToChange = !state;
emit(booleanToChange);
}
}
Run Code Online (Sandbox Code Playgroud)
看法:
class BoolView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Changing Bool')),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(
child: BlocBuilder<ChangeBoolCubit, bool>(
builder: (context, state) {
return (ChangeBoolCubit().one)
? Text('TRUE: ${ChangeBoolCubit().one}')
: Text('FALSE: …Run Code Online (Sandbox Code Playgroud)