Как перенаправить файл на другую страницу во флаттере - PullRequest
1 голос
/ 18 июня 2020

Я сейчас делаю приложение с Dart / flutter, и у меня проблема с маршрутизацией страниц. Приложение - это в основном соответствующее приложение, и я хочу добавить функциональность, позволяющую пользователю редактировать свой профиль. В настоящее время у нас есть 4 виджета с отслеживанием состояния: Match (), Message (), MyProfile () и EditProfile (). В нижней панели навигации я поместил три виджета: Match (), Message () и MyProfile (); когда пользователь хочет изменить информацию профиля, он переходит в MyProfile () и нажимает кнопку «изменить профиль», после чего пользователь переходит в EditProfile. После того, как пользователь изменит информацию, я хочу перенаправить страницу в MyProfile (), чтобы пользователь мог проверить информацию профиля. Приведенный ниже код является частью панели навигации.

class _NavigationHomeState extends State<NavigationHome> {
  int _currentIndex = 0;
  final List<Widget> _children = [
    Match(),
    Messages(),
    MyProfile(),
  ];

  void onTabTapped(int index) {
    setState(() {
      _currentIndex = index;
    });
  }

, и я помещаю приведенный ниже код в одну из кнопок EditProfile ().

Navigator.of(context).pushNamed('/myProfile');

Затем выдал мне сообщение об ошибке:

Ошибка: не удалось найти правильный поставщик над этим виджетом MyProfile

Вероятно, это происходит из-за того, что вы использовали BuildContext, в который не входит выбранный вами провайдер. Существует несколько распространенных сценариев ios:

  • Поставщик, который вы пытаетесь прочитать, находится на другом маршруте.

    Поставщики «ограничены». Поэтому, если вы вставите поставщика внутри маршрута, тогда другие маршруты не смогут получить доступ к этому поставщику.

  • Вы использовали BuildContext, который является предком поставщика, которого вы пытаетесь для чтения.

    Убедитесь, что MyProfile находится под вашим MultiProvider / Provider. Обычно это происходит, когда вы создаете поставщика и пытаетесь прочитать его немедленно.

Я думаю, я получаю эту ошибку, потому что мы установили _currentIndex в нижней панели навигации как 0, то есть Match (), поэтому Navigator.of (context) .pushNamed ('/ myProfile'); пытается перенаправить пользователя на страницу Match () (?)

Как мы можем перенести пользователя на страницу MyProfile после того, как человек сохранит и нажмет кнопку EditProfile ()?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Если вы собираетесь перейти в EditProfile из виджета MyProfile, я предлагаю просто открыть экран. Поскольку при этом не будет перезагружен весь экран, вы всегда можете передавать данные при выполнении pop.

RaisedButton(
  onPressed: () {
    // The Yep button returns "Yep!" as the result.
    Navigator.pop(context, 'Yep!');
  },
  child: Text('Yep!'),
);

Другой вариант - использовать метод pushNamedAndRemoveUntil.

navigator.pushNamedAndRemoveUntil('/MyProfile', ModalRoute.withName('/MyProfile'));

Думаю, я получаю эту ошибку, потому что мы установили _currentIndex в нижней панели навигации как 0, что соответствует Match (), поэтому Navigator.of (context) .pushNamed (' /мой профайл'); пытается перенаправить пользователя на страницу Match () (?)

Не уверен в своей ошибке, но вы можете передать данные в качестве аргумента при выполнении pushNamed.

RaisedButton(
  child: Text("Navigate to MyProfile"),
  onPressed: () {
   Navigator.pushNamed(
      context,
      '/myProfile',
      arguments: [
        'Extract Arguments Screen',
        'This message is extracted in the build method.',
      ],
    );
  },
),
1 голос
/ 18 июня 2020

Попробуйте использовать MaterialPageRoute вместо именованных маршрутов.

onPressed: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondRoute()),
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...