当用户从任何其他页面返回到此页面时,如何使用后退键刷新页面?

14 浏览
0 Comments

当用户从任何其他页面返回到此页面时,如何使用后退键刷新页面?

我有一个页面,它调用了多个类和不同的小部件,用户可以通过点击跳转到任何页面。\n目前的问题是,我希望每次将页面显示给用户时都能刷新原始页面。\n当它被新加载时(目前没有问题)。\n当用户使用返回键从其他页面返回时。\n旧数据显示在页面上,我想摆脱它。\n我尝试过使用Navigator.push方法(Observer类方法)并尝试监听用户按下返回键的时间。\n但是有多个页面提供唯一的请求,我不想将每个页面都与第一个页面链接起来。\n因为在点击Navigator.pop(context)方法时,我需要传递一些字符串。\n有人知道\n当用户使用返回键返回时,如何刷新页面。

0
0 Comments

问题的原因是使用NavigatorObserver类监听路由更改时,无法实现在用户从其他页面返回时刷新页面。已经尝试使用NavigatorObserver类,但在特定情况下无法起到帮助作用。

解决方法是创建自己的实现,重写didPop、didPush等方法,然后将其传递给MaterialApp或Navigator的navigatorObservers字段。

下面是解决方法的示例代码:

import 'package:flutter/material.dart';

class CustomNavigatorObserver extends NavigatorObserver {

@override

void didPop(Route route, Route previousRoute) {

super.didPop(route, previousRoute);

// 在用户从其他页面返回时执行刷新操作

// 刷新页面的代码

}

@override

void didPush(Route route, Route previousRoute) {

super.didPush(route, previousRoute);

// 在用户从其他页面跳转到该页面时执行操作

// 执行的操作的代码

}

}

void main() {

runApp(MaterialApp(

home: MyApp(),

navigatorObservers: [CustomNavigatorObserver()],

));

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text('Refresh Page'),

),

body: Center(

child: Text('Hello World'),

),

);

}

}

在上述代码中,我们创建了一个CustomNavigatorObserver类,继承自NavigatorObserver类,并重写了didPop和didPush方法。在didPop方法中,我们可以执行刷新页面的操作,在didPush方法中,我们可以执行其他操作。

在main函数中,我们创建了一个MaterialApp,并将CustomNavigatorObserver的实例添加到navigatorObservers字段中。这样就可以在用户从其他页面返回时执行刷新操作。

通过以上方法,我们可以实现在用户从其他页面返回时刷新页面的功能。

0
0 Comments

问题出现的原因:当用户从其他页面返回到页面时,页面没有刷新。

解决方法:使用以下代码在从第二个页面返回到第一个页面时刷新页面。

FirstPage()中添加以下代码:

Navigator.push( context, MaterialPageRoute( builder: (context) => SecondPage()), ).then((value) => setState(() {}));

当从SecondPage()返回到FirstPage()时,"then"语句将运行并刷新页面。

虽然这是一个可行的解决方法,但最好使用状态管理来更新小部件。

0
0 Comments

问题的原因是作者尝试使用Navigator.push方法来实现当用户从其他页面返回时刷新页面,但这种方法在作者的情况下不可行。

解决方法是使用Navigator.push方法返回的Future对象来确定何时从其他视图返回到该页面。可以使用await关键字等待Future的完成,然后在then回调中执行刷新页面的操作。

下面是一个示例代码:

Navigator.of(context).push(MaterialPageRoute(

builder: (context) => NewView(),

)).then((_) {

// 在这里调用setState()或适当处理刷新页面的操作

});

0