Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:从下一页返回运行函数后刷新页面_Flutter_Dart_Navigation_Page Refresh - Fatal编程技术网

Flutter 颤振:从下一页返回运行函数后刷新页面

Flutter 颤振:从下一页返回运行函数后刷新页面,flutter,dart,navigation,page-refresh,Flutter,Dart,Navigation,Page Refresh,我在第一页包含从服务器获取数据的初始语句中执行的函数,并在该页中使用该数据, 当我导航到第二个屏幕然后是第三个屏幕时,函数获取的数据会发生变化,因此我希望在返回到第一页时再次执行该函数以获取新数据: 第一页中的函数: void getUserStatus() async { SharedPreferences preferences = await SharedPreferences.getInstance(); setState(() { username = pr

我在第一页包含从服务器获取数据的初始语句中执行的函数,并在该页中使用该数据, 当我导航到第二个屏幕然后是第三个屏幕时,函数获取的数据会发生变化,因此我希望在返回到第一页时再次执行该函数以获取新数据:

第一页中的函数:

void getUserStatus() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      username = preferences.getString('username');
      userId = preferences.getString('logined_id');
      lang = preferences.getString('lang');
    });
    var url =
        "http://xxxx/api/controller/users/status_user.php?username=$username";
    var response = await http.get(url);
    var data = jsonDecode(response.body);
    setState(() {
      savedCourseId = data['m_id'];
      savedDayId = int.parse(data['d_id']);
    });
  }
  @override
  void initState() {
    getUserStatus();

    super.initState();
  }

所以你所要做的就是在任何你调用push to Screen 2的地方使用它们

await Navigator.push(context, MaterialPageRoute(builder: (_)=> YourScreen2()));
await getUserStatus();
这将告诉我们一些数据正在提交,我们必须等到您回到这里,当您再次回来时,您可以使用这些数据

你也可以尝试从屏幕上获取其他数据
如果您需要更多帮助,可以使用异步/等待模式导航到第二个屏幕

_navigateToNextPage(BuildContext context) async {
// Navigator.push returns a Future that completes after calling
// Navigator.pop on the 2nd screen Screen.
await Navigator.push(context,MaterialPageRoute(builder: (context) => SecondScreen()));

// After the 2nd screen returns.
getUserStatus();
}

如果我像这样使用命名路由器:Navigator.of(context.pushNamed('weeks',参数:{'courseId':courseId,'lang':lang,'savedDayId':savedDayId,'savedCourseID':int.parse(savedCourseID),'userID':userID,});