当状态从另一个小部件更改时,Flutter对Mobx状态更改做出反应

时间:2019-11-26 09:37:32

标签: flutter dart mobx

当我从另一个小部件设置状态(使用Mobx)时,我正在努力在我的抽屉组件中进行React。

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  final _pageIndex = PageIndex();

  List drawerItems = [
    {
      "icon": Icons.list,
      "name": "Aufgaben",
    },
    {
      "icon": Icons.add,
      "name": "Neue Aufgabe",
    },
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Observer(
          builder: (_) => Text(drawerItems[_pageIndex.value]["name"],
              style: TextStyle(color: Colors.black)),
        ),
        centerTitle: true,
        backgroundColor: Theme.of(context).canvasColor,
        iconTheme: IconThemeData(color: Colors.black),
        elevation: 0.0,
      ),
      drawer: Drawer(
        child: ListView(
          children: <Widget>[
            ListView.builder(
              physics: NeverScrollableScrollPhysics(),
              shrinkWrap: true,
              itemCount: drawerItems.length,
              itemBuilder: (BuildContext context, int index) {
                Map item = drawerItems[index];
                return ListTile(
                  leading: Icon(
                    item['icon'],
                  ),
                  title: Text(
                    item['name'],
                  ),
                  onTap: () {
                    _pageIndex.setIndex(index);
                    Navigator.pop(context);
                  },
                );
              },
            ),
          ],
        ),
      ),
      body: Observer(
        builder: (_) => IndexedStack(
          index: _pageIndex.value,
          children: <Widget>[
            AufgabenListe(),
            NeueAufgabe(),
          ],
        ),
      ),
    );
  }
}

当我在抽屉中单​​击一个项目时,我会调用_pageIndex.setIndex(index);来调用Mobx SetIndex函数。这工作正常,我的两个观察员正在按预期进行重建。

我的问题是我也想从子组件中控制索引堆栈的索引。例如,NeueAufgaben()小部件中的示例。但是当我这样做时,两个观察员arent都触发了重新提交。

有人知道如何做到这一点吗?

非常感谢;)

0 个答案:

没有答案