我试图使用navigator.pushReplacementName()
在路由之间传递值,但我没有得到它。
我不知道数据将退出pushreplacementnamed
并获得routes
键的正确语法和逻辑是什么。
输入下面的代码以方便理解:
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(),
routes: <String, WidgetBuilder> {
'/form': (BuildContext context) => new FormPage(email: ???, header: {'auth': ???}),
},
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
floatingActionButton: new FloatingActionButton(
onPressed: () {
Navigator.pushReplacementNamed(context, '/form', {email: 'myemail@flutter.com', header: {'auth': '1234'}});
},
child: new Icon(Icons.navigate_next),
),
);
}
}
class FormPage extends StatefulWidget {
FormPage({Key key, this.email, this.header}) : super(key: key);
String email;
Map header;
@override
FormPageState createState() => new FormPageState();
}
class FormPageState extends State<FormPage> {
@override
Widget build(BuildContext context) {
return new Container(
child: new Column(
children: <Widget>[
new Text(widget.email),
new Text(widget.header['auth'])
],
),
);
}
}
更正后:
尝试使用PushReplacementName
的目的是删除路由历史记录,因此如果用户按设备的后退按钮返回以前的路由,则该路由将不再存在。参考资料
此实现的原因是在登录页面上使用,如果用户已经通过Google Sign
身份验证,他将被重定向到传递登录参数的下一个页面,并且无法通过设备的后退按钮返回登录页面。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(),
routes: <String, WidgetBuilder> {
'/form': (BuildContext context) => new FormPage(), //new
},
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
floatingActionButton: new FloatingActionButton(
onPressed: () {
Navigator.of(context).pushReplacement( //new
new MaterialPageRoute( //new
settings: const RouteSettings(name: '/form'), //new
builder: (context) => new FormPage(email: 'myemail@flutter.com', header: {'auth': '1234'}) //new
) //new
); //new
},
child: new Icon(Icons.navigate_next),
),
);
}
}
class FormPage extends StatefulWidget {
FormPage({Key key, this.email, this.header}) : super(key: key);
String email;
Map header;
@override
FormPageState createState() => new FormPageState();
}
class FormPageState extends State<FormPage> {
@override
Widget build(BuildContext context) {
return new Container(
child: new Column(
children: <Widget>[
new Text(widget.email),
new Text(widget.header['auth'])
],
),
);
}
}
我想你可能没有理解结果是如何工作的。结果将返回到推送最后一条路由的上一个小部件,并使用await
来获取由上一次调用push
返回的future
的结果。您只想用参数启动路由吗?那你可以这么做。
Navigator.of(context).pushReplacement(
new MaterialPageRoute(
settings: const RouteSettings(name: '/form'),
builder: (context) => new FormPage(
email: 'myemail@flutter.com',
header: {'auth': '1234'},
),
),
);
问题内容: 我遇到的情况是表单跨越了几页(可能并不理想,但这就是事实)。我想为整个表单提供一个范围,以便您随身携带,以便用户在步骤之间来回移动时很容易记住状态。 所以我需要用非常伪的代码来做: 组 单击一个链接,然后将其路由到新模板(可能使用同一控制器)。 仍应与最后一页上的值相同。 是否以某种方式持久保存示波器的数据是解决此问题的正确方法,还是还有其他方法?您是否甚至可以创建一个在路由之间具有持
我有一个小部件,其中有两个小部件作为子部件,我希望它们之间有一些空间。 我已经尝试了,但结果不是我想要的。
Navigating Programmatically
问题内容: 我面临着在两个状态之间传递数据而不暴露url中数据的问题,就像用户不能真正直接进入此状态一样。 例如。我有两个状态“ A”和“ B”。我正在状态“ A”进行一些服务器调用,并将调用的响应传递到状态“ B”。服务器调用的响应是一个字符串消息,该消息很长,因此我无法在url中公开它。 那么,有角度的ui路由器中有什么方法可以在不使用url参数的情况下在状态之间传递数据吗? 问题答案: 我们
如何配置Flutter SDK?如何定位颤振SDK?我不知道SDK文件的位置。
我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误