保存小部件的状态

时间:2020-03-13 20:30:12

标签: flutter

我有一个按钮,可将页面推送到用户填充一些数据的页面,然后他们可以退出该页面,但返回并对其进行编辑。

我提供了一个简化的示例,目的是能够在退出“计数页”后保持其计数,而不必将计数器保存在其他变量中。我想要一种保存小部件状态的通用方法。

所以换句话说,我不希望废弃状态,我想保存它,所以当我导航回该页面时,就像从未弹出它一样。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Save State',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          child: Text("Go to counter page"),
          onPressed: () {
            Navigator.push(context,
                MaterialPageRoute(builder: (context) => CounterPage()));
          },
        ),
      ),
    );
  }
}

class CounterPage extends StatefulWidget {
  @override
  _CounterPageState createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
            RaisedButton(
              child: Text("Go back"),
              onPressed: () {
                Navigator.pop(context);
              },
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:1)

您应该阅读有关State Management的更多信息,这里有很多选择,您应该选择自己喜欢的东西。

如果您只想通过一种简单的方法来获取“页面”的结果,只需从Navigator.pop返回计数器值即可。