本文介绍了Flutter:使用不包含Bloc类型的上下文调用blocprovider.of()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是扑朔迷离的新手,我想使用BLoc实现一个简单的Login屏幕.没有构建错误,但在运行时收到以下错误

I am new to flutter and i wanted to implement a simple Login screen using BLoc. There is no build error but in runtime the following error is received

用不包含LoginBloc类型的Bloc的上下文调用的blocprovider.of()""

"blocprovider.of() called with a context that does not contain a Bloc of type LoginBloc"

我的代码

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,
          ),
        ],
      ),
    );
  },
);
  } 
}

推荐答案

您提供"了吗? LoginForm 上方小部件中的 LoginBloc ?

Did you "provide" the LoginBloc in a widget above LoginForm?

此错误意味着没有父窗口小部件引用创建的 LoginBloc .

This error means that there is no parent widget referencing a created LoginBloc.

如果不这样做,则需要具备以下条件:

If you don't you'll need to have:

BlocProvider<LoginBloc>(
  create: (context) => LoginBloc(),
  builder: (context, state) {
    // LoginForm can now use `BlocProvider.of<LoginBloc>(context)`
  }
)

这篇关于Flutter:使用不包含Bloc类型的上下文调用blocprovider.of()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-22 11:14