Flutter 如何在Flatter中将文件路由到其他页面

Flutter 如何在Flatter中将文件路由到其他页面,flutter,routes,Flutter,Routes,我现在正在使用Dart/Flatter制作一个应用程序,但在路由页面方面遇到了问题。 该应用程序基本上是匹配的应用程序,我想添加的功能,用户可以编辑他们的个人资料。目前,我们有4个有状态的小部件:Match()、Message()、MyProfile()和EditProfile()。在底部的导航栏中,我放置了三个小部件,Match()、Message()和MyProfile();当用户想要更改配置文件信息时,该用户转到MyProfile()并单击“编辑配置文件”按钮,这将使用户转到EditPro

我现在正在使用Dart/Flatter制作一个应用程序,但在路由页面方面遇到了问题。 该应用程序基本上是匹配的应用程序,我想添加的功能,用户可以编辑他们的个人资料。目前,我们有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;
    });
  }
然后给了我一个错误,说

错误:找不到此服务器上的正确提供程序 MyProfile小部件

这可能是因为您使用的
BuildContext
没有 包括您选择的提供商。有几个常见的场景:

  • 您试图读取的提供程序位于不同的路径中

    提供者是“有范围的”。因此,如果在路由中插入一个提供程序, 然后其他路由将无法访问该提供商

  • 您使用了一个
    BuildContext
    ,它是您试图读取的提供程序的祖先

    确保MyProfile位于您的 多提供者/提供者。这种情况通常发生在你生病的时候 创建提供程序并尝试立即读取它

我想是因为我们将底部导航栏中的_currentIndex设置为0,这是Match(),所以Navigator.of(context.pushName)('/myProfile');试图将用户带到Match()页(?)


如何在人员保存后将用户带到MyProfile页面并单击EditProfile()上的按钮?

尝试使用
MaterialPageRoute
而不是命名路由

onPressed: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondRoute()),
  );
}

如果您要从MyProfile小部件编辑Profile,那么我建议只弹出屏幕。由于这不会重新加载整个屏幕,所以在执行pop时始终可以传递数据

RaisedButton(
  onPressed: () {
    // The Yep button returns "Yep!" as the result.
    Navigator.pop(context, 'Yep!');
  },
  child: Text('Yep!'),
);
另一个选项是使用pushnamedremoveintill方法

navigator.pushNamedAndRemoveUntil('/MyProfile', ModalRoute.withName('/MyProfile'));
我想我得到这个错误是因为我们在 底部导航栏为0,即Match(),因此 Navigator.of(context.pushNamed('/myProfile');试图带走用户 到Match()页(?)

不确定您的错误,但您可以在执行PUSHNAME时将数据作为参数传递

RaisedButton(
  child: Text("Navigate to MyProfile"),
  onPressed: () {
   Navigator.pushNamed(
      context,
      '/myProfile',
      arguments: [
        'Extract Arguments Screen',
        'This message is extracted in the build method.',
      ],
    );
  },
),

我尝试了,但仍然得到了相同的错误:在MyProfile小部件上方找不到正确的提供程序这可能是因为您使用的
BuildContext
不包括您选择的提供程序。有几种常见的情况:-您尝试读取的提供程序位于不同的路径中。提供者是“有范围的”。因此,如果在路由中插入一个提供程序,则其他路由将无法访问该提供程序。-您使用了一个
BuildContext
,它是您试图读取的提供程序的祖先。您能提供完整的代码吗?
RaisedButton(
  child: Text("Navigate to MyProfile"),
  onPressed: () {
   Navigator.pushNamed(
      context,
      '/myProfile',
      arguments: [
        'Extract Arguments Screen',
        'This message is extracted in the build method.',
      ],
    );
  },
),