首页 > 解决方案 > 如何在颤动中返回刷新的数据

问题描述

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

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

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

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

标签: flutter

解决方案


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

代码片段

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.'),
              ),
            )
          ],
        ),
      ),
    );
  }
}

推荐阅读