android - Flutter:使用不包含 Bloc 类型的上下文调用 blocprovider.of()
问题描述
我是 Flutter 的新手,我想使用 BLoc 实现一个简单的登录屏幕。没有构建错误,但在运行时收到以下错误
“使用不包含 LoginBloc 类型的 Bloc 的上下文调用 blocprovider.of()”
我的代码
class LoginForm extends StatefulWidget {
@override
State<LoginForm> createState() => _LoginFormState();
}
class _LoginFormState extends State<LoginForm> {
final _usernameController = TextEditingController();
final _passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
_onLoginButtonPressed() {
BlocProvider.of<LoginBloc>(context).add(
LoginButtonPressed(
username: _usernameController.text,
password: _passwordController.text,
),
);
}
return BlocBuilder<LoginBloc, LoginState>(
builder: (context, state) {
return Form(
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'username'),
controller: _usernameController,
),
TextFormField(
decoration: InputDecoration(labelText: 'password'),
controller: _passwordController,
obscureText: true,
),
RaisedButton(
onPressed:
state is! LoginInProgress ? _onLoginButtonPressed : null,
child: Text('Login'),
),
Container(
child: state is LoginInProgress
? CircularProgressIndicator()
: null,
),
],
),
);
},
);
}
}
解决方案
LoginBloc
您是否在上面的小部件中“提供”了LoginForm
?
此错误意味着没有引用 created 的父小部件LoginBloc
。
如果不这样做,您将需要:
BlocProvider<LoginBloc>(
create: (context) => LoginBloc(),
builder: (context, state) {
// LoginForm can now use `BlocProvider.of<LoginBloc>(context)`
}
)
推荐阅读
- html - bootstrap 下拉::after 伪元素右对齐
- html - 在 AMP 页面上,amp-carousel 元素是否应该具有灯箱属性?
- python - 带有数据框的嵌套字典到熊猫中的数据框
- javascript - 当代码中有另一个不相关的函数时出现“不是函数”错误
- c++ - 如果后面没有空格,则正则表达式不匹配最后一个单词
- c - 发送原始 TCP + IPV4 数据包无效。Wireshark 的不同输出
- database - 在 Oracle 11g (Windows Server 2012 R2) 中还原数据库时更改目标的 TABLESPACE
- eclipse - 无法在 Eclipse Luna 中安装 e(fx)clipse
- .net - 如何在 WiX 中将依赖项 .dll 文件与主要产品捆绑在一起
- html - Angular Tooltip 无法识别“\r”或“\n”字符