Провайдер в другом маршруте Flutter

Я хотел загрузить изображение в Firebase Storage, когда увидел эту ошибку:

The provider you are trying to read is in a different route.

Итак, я начал изучать, что это за провайдер, и теперь я понял, что мне нужно включить страницу, которую я использую для загрузки изображения, в том же маршруте предка. Provider типа Database.

Итак, у меня возникла проблема внутри «Registration_form», созданного «LogInPage» через навигатор следующим образом:

      void navigateToRegistrationForm(context) {
  Navigator.push(context,
      MaterialPageRoute<void>(builder: (BuildContext context) {
    return Reg_Form();
  }));
  return;
}

Теперь я меняю код примерно так:

      void navigateToRegistrationForm(context) {
  Navigator.push(
      context,
      MaterialPageRoute<void>(
          builder: (BuildContext context) => Provider<Database>(
                create: (_) => FirestoreDatabase(),
                builder: (context, child) => Reg_Form(),
              )));
  return;
}

Но я не понимаю, что мне передать create метод ... я просто хочу создать Reg_Formв правильном пути для вызова функций Firebase, чтобы поместить файл в хранилище firebase, поэтому я думаю, что FirebaseDatabase не то, что мне подходит.

1 ответ

Если я правильно понимаю вашу проблему, вы можете переместить ChangeNotifierProvider для тебя Database класс выше в дереве виджетов, обернув ваш MaterialApp вот так:

      ChangeNotifierProvider<Database> (
  builder: (context) => Database(),
  child: MaterialApp(...

Или просто измените create в том, что вы предоставили

      create: (_) => Database(),

В любом случае вы должны получить доступ к правильному Provider / BuildContext в вашей регистрационной форме со стандартным context.read<Database>()...

Другие вопросы по тегам