Не может найти правильный поставщик выше этого виджета потребителя - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь использовать мультипровайдер из библиотеки Provider. Но это не работает, потому что он не может найти правильного провайдера, хотя верхний виджет до того, как материал MultiProvider.

Я уже пытаюсь импортировать что-нибудь, но оно все еще не работает

class _LoginViewState extends State<LoginView> {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return BaseView<LoginModel>(
      builder: (context, model, child) => Scaffold(
        backgroundColor: backgroundColor,
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            StreamBuilder<Chat>(
              stream: Provider.of<Socketio>(context).streamChat,
              builder: (context, snapshot) {
                return Text(snapshot.data?.toString() ?? 'Foo');
              },
            ),
            LoginHeader(
              validationMessage: model.errorMessage,
              controller: _controller),
            model.state == ViewState.Busy
            ? CircularProgressIndicator()

вот где я могу предоставить Provider.of

void main() {
  setupLocator();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return  MultiProvider(
      providers: [
        StreamProvider<User>(
          initialData: User.initial(),
          builder: (context) => locator<AuthenticationService>().userController,
        ),
        StreamProvider<Chat>(
          initialData: Chat.initial(),
          builder: (context) => locator<Socketio>().chatController,
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(),
        initialRoute: '/login',
        onGenerateRoute: Router.generateRoute,
      ),
    );
  }
}```
this is where I provider socket io provider before Maetrialapp inside Multi Provider

1 Ответ

0 голосов
/ 20 мая 2019

Проблема в том, что вы делаете:

Provider.of<Socketio>(context)

Но вы никогда не создаете провайдера типа Provider<Socketio>

Глядя на свой код, вы, вероятно, захотите использовать:

Provider.of<Chat>(context)
...