【发布时间】:2020-09-26 01:11:15
【问题描述】:
我有一个带有几个有状态和无状态小部件的小型颤振应用程序。 我的抽屉小部件如下所示:
class AppDrawer extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
_createDrawerHeader(),
ListTile(
title: Text('Scenario'),
onTap: () {
Navigator.pop(context);
Navigator.pushReplacementNamed(context, Routes.scenario);
},
),
...
这适用于我的小部件之间的切换。我现在有一个简单的计数器小部件,它在其状态中存储一个计数器变量。
class Counter extends StatefulWidget {
static const String routeName = '/Counter';
int _counter = 0;
@override
_CounterState createState() => new _CounterState();
}
class _CounterState extends State<Counter> {
void _increment() {
setState(() {
widget._counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: <Widget>[
new RaisedButton(
onPressed: _increment,
child: new Text('Increment'),
),
new Text('Count: ${widget._counter}'),
],
),
drawer: AppDrawer(),
);
}
}
如果我使用抽屉在此小部件和其他小部件之间切换并返回到计数器小部件,则计数器始终为 0。看起来状态每次都被初始化。 我是使用颤振的初学者,我想我可以在这种状态下保存一个变量。我想我错了。由于我的搜索没有得到一些有用的结果,也许你可以告诉我如何解决这个问题,或者只是提供一些信息链接。 谢谢你的帮助:)
【问题讨论】:
-
您如何维护应用程序中的状态?您使用的是
bloc、provider还是其他方法? -
不,到目前为止我只是想存储计数器。所以看来我需要的不仅仅是有状态小部件的状态类?
-
尝试用 pushNamed 替换 pushReplacementNamed。替换基本上删除了当前删除与此上下文关联的路由,因此是 Counter 小部件。虽然只是 push 会将新路由放在导航器堆栈的顶部,但会保存以前的状态
-
您可以存储状态并在创建小部件时将其传回给小部件。例如您可以使用某种状态管理方式存储计数器,然后重用存储的值。
-
用 pushNamed 替换 pushReplacementNamed 并没有改变任何东西。
标签: flutter