- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个页面推送另一个页面并等待返回/弹出的值进行处理。如果可能的话,我希望第二页能够委托(delegate)(让另一个页面返回值)。像这样:
// page 1
Navigator.of(context).push(Page2()).then((value) => print(value)); // process value; perhaps setState or whatever
// page 2
Navigator.of(context).pushReplacement(Page3()); // let another page handle the rest
// page 3
Navigator.of(context).pop(99);
但是,第一页上的 future 永远不会返回,并且永远不会打印该值(或以我认为合适的方式处理)。 pushReplacement 的原因是我不希望用户在进入第三页后返回到第二页。
这是一个示例 Flutter 应用程序,您可以在 https://dartpad.dartlang.org/flutter 上试用明白我的意思。
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Page1(),
);
}
}
class Page1 extends StatefulWidget {
@override
Page1State createState() => Page1State();
}
class Page1State extends State<Page1> {
List<int> numbers = [];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: <Widget>[
Text('Page 1'),
...numbers.map((number) => Text(number.toString())),
RaisedButton(
child: Text('go to page 2'),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => Page2()))
.then((number) {
if (number != null) {
setState(() {
numbers.add(number);
});
}
});
},
),
],
),
),
);
}
}
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: <Widget>[
Text('Ready?'),
RaisedButton(
child: Text('Yes'),
onPressed: () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => Page3()));
},
),
RaisedButton(
child: Text('No'),
onPressed: () => Navigator.of(context).pop(),
),
],
),
),
);
}
}
class Page3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: <Widget>[
Text('Pick a number'),
...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(
(number) => RaisedButton(
child: Text(number.toString()),
onPressed: () => Navigator.of(context).pop(number),
),
),
RaisedButton(
child: Text('Cancel'),
onPressed: () => Navigator.of(context).pop(),
),
],
),
),
);
}
}
我必须澄清用例。第一页将从服务器或其他任何地方获取数据,所以我会使用 FutureBuilder 或类似的。第二页是创建/添加附加项目的表单。表单已提交,如果服务器对数据满意,响应将包含新创建的数据。然后我想用显示数据的成功页面替换当前表单页面。当用户弹出此页面时,我希望用数据更新第一页的列表。
可以使用像 Bloc、ValueNotifier 或类似的花哨的状态管理,但这个页面是短暂的,我想用尽可能少的样板代码来实现这个特性。此外,我发现如果其他页面需要访问,则需要在 MaterialApp 之上/之前添加使用这些状态管理类。对于可能深埋在我的应用程序中的页面,我想避免在 main 中添加 Bloc/ValueNotifier/whatever。感觉就是太重视它了。
最佳答案
你可以给 pushReplacement
一个结果,就像它被弹出一样返回。
所以在这种情况下你可以做的是再次给它一个 future (例如使用完成者),原始推送小部件可以再次等待真正的结果
void method() async {
final completer = Completer();
final result = await navigator.pushReplacement(route, result: completer.future);
completer.complete(result);
}
关于flutter - 在中间页面使用 PushReplacement 时无法弹出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64580244/
我有一个页面推送另一个页面并等待返回/弹出的值进行处理。如果可能的话,我希望第二页能够委托(delegate)(让另一个页面返回值)。像这样: // page 1 Navigator.of(conte
我有一个带有自定义底部导航栏的主屏幕,当单击一个图标时,它将当前索引设置为被单击的图标。但是当点击索引号 2 时,它会整页路由到另一个页面以添加“帖子”。提交帖子后,pushReplacement 会
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示: class MyApp extends StatelessWidget
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示: class MyApp extends StatelessWidget
我尝试使用命名路由,但它似乎并没有给我一个错误“无法找到 _MaterialAppState 的路由生成器(“/homepage”,null)。我无法理解 namedRoutes 在这方面的工作案例。
我想知道是否有一种使用 Navigator 调用的方法不允许用户向后导航并保持 Hero Widget 的动画完好无损?我在启动画面和登录屏幕之间有一个英雄小部件图像转换,但我想阻止用户从启动画面返回
在flutter中,我们有两种方式可以在销毁当前页面的同时退出页面。第一个是pushReplacement- Navigator.pushReplacement(context, MaterialPa
使用命令式 api 无法完成基于页面的路由,而是向 Navigator.pages 提供一个没有相应页面的新列表。 'package:flutter/src/widgets/navigator.dar
我是一名优秀的程序员,十分优秀!