如何在抖动中返回刷新的数据

时间:2020-06-14 17:56:25

标签: flutter

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

当我单击此代码中的按钮时,我将转到下一页(从第1页到第2页)

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

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

1 个答案:

答案 0 :(得分:1)

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

代码段

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

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

工作演示

enter image description here

完整代码

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