【发布时间】:2021-04-27 01:23:47
【问题描述】:
上下文
我有两个无状态小部件(页面):HomePage 和 DetailsPage。显然应用程序启动并启动HomePage。用户可以按下一个按钮导航到DetailsPage,使用Navigator.pop() 按钮导航回HomePage。
我知道DetailsPage 何时与.whenComplete() 方法一起使用。正是在这一点上,我想重建 HomePage 小部件。
代码
这是我行为的最小再现。
main.dart
import 'package:example/home.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: HomePage());
}
}
home.dart
import 'package:example/details.dart';
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
static const name = 'Home Page';
const HomePage() : super();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: MaterialButton(
color: Colors.blue,
textColor: Colors.white,
child: Text(name),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: DetailsPage.builder),
).whenComplete(() => print('Rebuild now.'));
},
),
),
);
}
}
details.dart
import 'package:flutter/material.dart';
class DetailsPage extends StatelessWidget {
static const name = 'Details Page';
static WidgetBuilder builder = (BuildContext _) => DetailsPage();
const DetailsPage();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(name),
MaterialButton(
color: Colors.blue,
textColor: Colors.white,
child: Text('Go Back'),
onPressed: () => Navigator.pop(context),
),
],
),
),
);
}
}
问题
如何在.whenComplete() 方法回调中调用此无状态小部件 (HomePage) 的重建?
【问题讨论】:
-
重建这个无状态小部件有什么意义?
-
这个例子只是一个最小的例子。在我的实际应用程序中,我正在构建函数 (
FutureBuilder) 中向 Web 服务器发出获取请求,并且我知道 Web 服务数据更新 之后 我离开第二页,所以我想要那个数据反映在第一页。 -
我认为这个例子行不通,坚果。它需要
StatefulWidget,而我的实际实现没有要更新的状态。除非我能够在不实际更新状态值的情况下任意调用setState(可以吗?)。 -
我不知道为什么这个问题被否决了?它满足质量 Stack Overflow 问题的所有要求。
标签: flutter