Функция инициализации MaterialApp/виджет с соответствующим контекстом

#flutter #dart

Вопрос:

Как и в любом другом приложении, которое я создал, у меня есть стандартный код, который мне нужно выполнить перед загрузкой приложения:

  • проверка сеанса
  • храните увлажнение
  • прослушиватель изменения маршрута
  • прослушиватель сеанса пользователя

Этот код чаще всего требует наличия BuildContext контекста. Я не могу использовать контекст, который находится на одном уровне с MaterialApp из-за жалоб от flutter, поэтому мне нужно пройти более глубокие уровни 1 , чтобы получить контекст от потомка. Этот потомок-мой домашний маршрут, и он, очевидно, терпит неудачу, когда вы удаляетесь.

Как правильно использовать контекст и запускать приложение «Мои наблюдатели» по всему миру? Где бы вы постоянно следили, например, за изменением навигации?

Комментарии:

1. Я считаю, что вы можете использовать свойство routeObserver MaterialApp для передачи routeObserver от вашего routeChangeListener.

2. Это был просто пример. У меня есть много других битов, которые нужно запустить.

3. Я не думаю, что, за исключением того, что связано с деревом виджетов, вам понадобится контекст. В любом случае, навигация будет единственной вещью, которая будет зависеть от приложения MaterialApp, для остальной части вы можете обернуть все в конструктор, который даст вам контекст.

4. Даже для того, чтобы вывести локоть из блока (для доступа к состоянию), требуется контекст: BlocProvider.of<ProfileCubit>(context); Ты имеешь в виду ту builder часть MAterialApp ?

5. Нет, Конструктор — это тоже виджет. Если все находится на вершине, вам не нужен BlocProvider для создания объекта блока. Вы можете непосредственно создать его самостоятельно и использовать его. BlocProvider используется для обхода дерева виджетов, чтобы найти ближайшего предка типа блока.