Flutter 如何在Flatter中将文件路由到其他页面
我现在正在使用Dart/Flatter制作一个应用程序,但在路由页面方面遇到了问题。 该应用程序基本上是匹配的应用程序,我想添加的功能,用户可以编辑他们的个人资料。目前,我们有4个有状态的小部件:Match()、Message()、MyProfile()和EditProfile()。在底部的导航栏中,我放置了三个小部件,Match()、Message()和MyProfile();当用户想要更改配置文件信息时,该用户转到MyProfile()并单击“编辑配置文件”按钮,这将使用户转到EditProfile。用户更改信息后,我想将页面路由到MyProfile(),以允许用户检查配置文件信息。 下面的代码是导航栏的一部分Flutter 如何在Flatter中将文件路由到其他页面,flutter,routes,Flutter,Routes,我现在正在使用Dart/Flatter制作一个应用程序,但在路由页面方面遇到了问题。 该应用程序基本上是匹配的应用程序,我想添加的功能,用户可以编辑他们的个人资料。目前,我们有4个有状态的小部件:Match()、Message()、MyProfile()和EditProfile()。在底部的导航栏中,我放置了三个小部件,Match()、Message()和MyProfile();当用户想要更改配置文件信息时,该用户转到MyProfile()并单击“编辑配置文件”按钮,这将使用户转到EditPro
class _NavigationHomeState extends State<NavigationHome> {
int _currentIndex = 0;
final List<Widget> _children = [
Match(),
Messages(),
MyProfile(),
];
void onTabTapped(int index) {
setState(() {
_currentIndex = index;
});
}
然后给了我一个错误,说
错误:找不到此服务器上的正确提供程序
MyProfile小部件
这可能是因为您使用的BuildContext
没有
包括您选择的提供商。有几个常见的场景:
- 您试图读取的提供程序位于不同的路径中 提供者是“有范围的”。因此,如果在路由中插入一个提供程序, 然后其他路由将无法访问该提供商
- 您使用了一个
,它是您试图读取的提供程序的祖先 确保MyProfile位于您的 多提供者/提供者。这种情况通常发生在你生病的时候 创建提供程序并尝试立即读取它BuildContext
如何在人员保存后将用户带到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.',
],
);
},
),