为啥 Navigator.pushNamed(context, "route");在我的 flutter-cupertino-app 代码示例中工作?
Posted
技术标签:
【中文标题】为啥 Navigator.pushNamed(context, "route");在我的 flutter-cupertino-app 代码示例中工作?【英文标题】:Why doesn't Navigator.pushNamed(context, "route"); work in my flutter-cupertino-app code example?为什么 Navigator.pushNamed(context, "route");在我的 flutter-cupertino-app 代码示例中工作? 【发布时间】:2020-09-20 18:22:17 【问题描述】:这是我的第一个问题,我希望它是可读的。 我创建了一个示例颤振项目,其中说明了我的问题中指定的问题。 如果代码在 android 上运行,AndroidAppVersion-Object 会创建一个 Material App,其中包含一个带有红色 Scaffold 的 AndroidHomeScreen-Object 和一个标题为“Android”的 Button。当用户按下按钮时,将出现包含橙色 Scaffold 的 AnotherPageView-Object。 AnotherPageView-Object 只是一个示例页面。 如果平台不是 Android,则 (ios-)Cupertino-App 将由 IOSAppVersion-Object 创建,该对象包含带有绿色脚手架的 IOSHomeScreen 和标题为“IOS”的按钮。用户再次按下按钮以创建另一个页面视图对象。
所以问题来了:
当我使用Navigator.pushNamed(context, AnotherPageView.anotherPage);
该代码不起作用,它给了我我在下面添加的错误。
但是,如果我使用它,它会起作用
Navigator.push(context,
CupertinoPageRoute(builder: (context) => AnotherPageView()));
但我想知道为什么它不适用于第一个。
代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:io';
void main()
runApp(Platform.isAndroid ? IOSAppVersion() : AndroidAppVersion());
class AndroidAppVersion extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
routes:
AnotherPageView.anotherPage: (context)
return AnotherPageView();
,
home: AndroidHomeScreen(),
);
class AndroidHomeScreen extends StatelessWidget
@override
Widget build(BuildContext context)
return Scaffold(
backgroundColor: Colors.red,
body: MaterialButton(
onPressed: ()
Navigator.pushNamed(context, AnotherPageView.anotherPage);
,
child: Center(
child: Text('Android'),
),
),
);
class IOSAppVersion extends StatelessWidget
@override
Widget build(BuildContext context)
return CupertinoApp(
home: IOSHomeScreen(),
);
class IOSHomeScreen extends StatelessWidget
@override
Widget build(BuildContext context)
return Scaffold(
backgroundColor: Colors.green,
body: CupertinoButton(
child: Center(child: Text('Hallo IOS')),
onPressed: ()
Navigator.pushNamed(context, AnotherPageView.anotherPage);
,
),
);
class AnotherPageView extends StatelessWidget
static String anotherPage = "anotherPage";
@override
Widget build(BuildContext context)
return Scaffold(
backgroundColor: Colors.orange,
);
这是显示的错误:
在处理手势时抛出以下断言: 在 _WidgetsAppState 中找不到路由 RouteSettings("anotherPage", null) 的生成器。 按以下顺序搜索路线的生成器:
对于“/”路由,使用“home”属性(如果非空)。 否则,如果“路由”表有路由条目,则使用它。 否则,将调用 onGenerateRoute。对于任何未被“home”和“routes”处理的有效路由,它应该返回一个非空值。 最后如果一切都失败了 onUnknownRoute 被调用。 不幸的是,未设置 onUnknownRoute。
...
【问题讨论】:
【参考方案1】:这个
return CupertinoApp(
home: IOSHomeScreen(),
);
不知道任何路线,你需要提供你的路线到materialapp和cupertinoapp,就做
return CupertinoApp(
routes:
AnotherPageView.anotherPage: (context)
return AnotherPageView();
,
home: IOSHomeScreen(),
);
【讨论】:
以上是关于为啥 Navigator.pushNamed(context, "route");在我的 flutter-cupertino-app 代码示例中工作?的主要内容,如果未能解决你的问题,请参考以下文章