【问题标题】:How to go back with refreshed data in flutter如何在颤振中返回刷新的数据
【发布时间】:2020-06-15 14:44:55
【问题描述】:

我正在尝试使用后退按钮或箭头按钮返回,但是当我返回上一页时,数据不会刷新。

当我单击此代码中的按钮时,我将进入下一页(从 page1 到 page2)

      Navigator.of(context).push(MaterialPageRoute(builder: (_) {
                retturn Page2();
          }));

并对 Page2() 进行了一些更改,这些更改将影响 Page1(),然后从应用栏上的箭头按钮或 android 中的后退按钮,如果我们按其中任何一个来返回,我们有两个选项可以返回从 page2() 转到 Page1() 然后我想从 firebase 刷新数据

【问题讨论】:

  • 你在说什么数据?请更具体。
  • AppBar中有返回按钮吗?您尝试返回的页面是否在导航堆栈上?你能发布更多代码让这个问题更有意义吗?
  • 我对代码做了一些改动

标签: flutter


【解决方案1】:

您可以在下面复制粘贴运行完整代码
你可以使用await Navigator.push然后调用setState
Navigator.pop也可以传回数据

代码 sn-p

result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => SelectionScreen()),
    );

setState(() {});
...
Navigator.pop(context, 'Yep!');

工作演示

完整代码

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'Returning Data',
    home: HomeScreen(),
  ));
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String result = "wait Navigator.pop";

  _navigateAndDisplaySelection(BuildContext context) async {
    result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => SelectionScreen()),
    );

    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Returning Data Demo'),
      ),
      body: Center(
        child: Column(
          children: [
            Text(result),
            RaisedButton(
              onPressed: () {
                _navigateAndDisplaySelection(context);
              },
              child: Text('Pick an option, any option!'),
            )
          ],
        ),
      ),
    );
  }
}

class SelectionScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Pick an option'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: () {
                  // Close the screen and return "Yep!" as the result.
                  Navigator.pop(context, 'Yep!');
                },
                child: Text('Yep!'),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: RaisedButton(
                onPressed: () {
                  // Close the screen and return "Nope!" as the result.
                  Navigator.pop(context, 'Nope.');
                },
                child: Text('Nope.'),
              ),
            )
          ],
        ),
      ),
    );
  }
}

【讨论】:

  • 它将用新数据刷新页面
  • 是的。它将使用新数据刷新页面。因为在等待推送之后,你然后调用 setState
  • 我已更新示例 gif 和完整代码以使其更清晰
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 2021-09-23
  • 2019-11-22
  • 2019-05-21
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多