现在我的应用程序可以刷新的唯一方法(这是一个新闻应用程序,所以它需要不断刷新)有两种方式:1)刷新通过滚动或2)在后台杀死应用程序后重新启动。
我想这样做,当用户刚刚返回到应用程序时(假设我正在使用我的应用程序,然后我去微信发送一条短信,然后我回来),应用程序被刷新。
这是刷新滚动的代码。
final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
new GlobalKey<RefreshIndicatorState>();
然后调用这个函数:
Future<void> _refresh() async {
print("Refreshed");
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => MyHomePage(),
),
).then((value) => null);
}
我该怎么做才能达到我的需要?
有没有办法检查某人是否已经"返回"了?到我的应用程序?然后我就可以调用这个函数了
您需要订阅应用程序生命周期。在Flutter中,它不是在原生环境中构建的。然而,去年我偶然发现了一篇很好的文章,试图完成同样的事情:
https://medium.com/pharos-production/flutter-app-lifecycle-4b0ab4a4211a
实现的要点如下:
class MyHomePage extends StatefulWidget {
@override _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print('state = $state');
}
@override
Widget build(BuildContext context) {
return YourWidget();
}
}
一个更好的解决方案是给你的FutureBuilder或StreamBulder的子部件一个随机的唯一键。当您从后台返回时,这将强制底层小部件重新绘制(并触发未来或流)。
key: UniqueKey(),
的例子:
return FutureBuilder<PriceData>(
future: DbService.getPriceData(),
builder: (context, priceData) {
if (priceData.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
}
return AnimatedAppear(
key: UniqueKey(), <---- here!