Какой поставщик Riverpod следует использовать для обработки состояния навигации в сочетании с Navigator 2.0?

Я разрабатываю довольно сложное кроссплатформенное (Android / iOS / веб) приложение во Flutter. Я новичок во Flutter, так как начал заниматься нативной разработкой для Android и iOS.

Я исследовал лучший способ управления навигацией и состоянием во Flutter, и до сих пор я пришел к выводу, что лучшим подходом было бы использование Navigator 2.0 API в сочетании с Государственная библиотека управления Riverpod. Насколько я понимаю, это самые современные и мощные библиотеки для навигации и управления состоянием во Flutter.

Однако мне нелегко понять, как интегрировать Riverpod с Navigator 2.0. Как человек, который плохо знаком с обеими библиотеками и вообще с Flutter в целом, я в идеале хотел бы найти какой-нибудь канонический пример в документации (либо в Navigator, либо в Riverpod), который показывает, как это должно быть сделано, но я не нашел такой пример. В отсутствие этого я был бы очень благодарен за любые советы о том, как это сделать, и в частности о том, какой из многих типов поставщиков Riverpod лучше всего подходит для работы по управлению состоянием навигации. Например, что может быть причиной предпочесть ChangeNotifierProvider вместо StateNotifierProvider или наоборот? Есть ли другой тип провайдера Riverpod, который работал бы лучше, чем любой из них?


person CKP78    schedule 04.06.2021    source источник
comment
Вы не найдете многого в Navigator 2.0, потому что, честно говоря, он довольно сложен, не многие еще его приняли. Что касается ChangeNotifier и StateNotifier, они являются прямыми альтернативами, и их можно менять местами. На мой взгляд, с StateNotifier работать более естественно.   -  person Alex Hartford    schedule 04.06.2021


Ответы (1)


Я сильно усложнял эту проблему и даже сделал огромный маршрутизатор, чтобы обойти ее (у Рэя Вендерлиха есть пример флаттер-маршрутизатора вместе с некоторыми другими руководствами). Я также пробовал некоторые другие пакеты, предназначенные для маршрутизации, и это всегда каким-то образом мешало моему пользовательскому интерфейсу.

Фактически все сводилось к тому, что мне нужно было передать контекст своим подклассам. Итак, в конструкторе для всего, что не находится непосредственно в ваших маршрутах MaterialApp, вы должны сделать MyClass (контекст BuildContext, {требуется this.whatever}); а затем назовите его MyClass (контекст, что угодно). Остальное у меня отлично работает с Navigator.push named (context, routename). У меня есть панели приложений и меню с опциями навигации, так что это сложнее.

Надеюсь, в этом есть смысл. На веб-сайте Flutter есть информация о настройке MaterialApp (), а также именованных маршрутах.

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

person KatieK    schedule 07.06.2021