如何在 Flutter 中检测抽屉中的数据变化?

How to detect data changes from Drawer in Flutter?

我有一个抽屉来过滤我的产品,我的抽屉是从另一个像这样的飞镖文件导入的。

这是homePage.dart's脚手架。抽屉进口如:

return Scaffold(
  key: _scaffoldkey,
  appBar:AppBar(
          leading: IconButton(
              icon: Icon(Icons.arrow_back, color: Colors.black),
              onPressed: () => Navigator.pop(context)),
          backgroundColor: Colors.white,
          title: Text('HomePage',
              style: TextStyle(color: Colors.black),
              textAlign: TextAlign.left),
        ),
  endDrawer:filterDrawer(context),

这是 filterDrawer.dart 文件..

Container filterDrawer(context) {
 TextStyle childStyle = TextStyle(fontSize: 14);
  TextStyle childActiveStyle = TextStyle(fontSize: 14, color: primaryColor);
  var _supRepo = Provider.of<SupplierRepo>(context, listen: false);
  return Container(
      color: Colors.white,
      width: MediaQuery.of(context).size.width * 0.75,
      child: Column(
        children: [Expanded(
        child: ListView.builder(
          itemCount: _supRepo.storeFilterList.length,
          itemBuilder: (context, index) {
            return _supRepo.storeFilterList[index]['options'].length == 0
                ? SizedBox(
                    height: 0.1,
                  )
                : ExpansionTile(
                    title: Text(_supRepo.storeFilterList[index]['name']),
                    childrenPadding: EdgeInsets.only(left: 10),
                    children: List<Widget>.generate(
                        _supRepo.storeFilterList[index]['options'].length,
                        (subIndex) {
                      return ListTile(
                        onTap:() {
                          _supRepo.setFilterData(
                              _supRepo.storeFilterList[index]
                                      ['filterQueryName']
                                  .toString(),
                              _supRepo.storeFilterList[index]['options']
                                  [subIndex]['id']);
                        },
                        trailing: Icon(Icons.check_circle_outline),
                        title: Text(_supRepo.storeFilterList[index]['options'][subIndex]['name'],
                            style: _supRepo.filterQueryList[_supRepo.storeFilterList[index]['filterQueryName'].toString()] != null
                                ? (_supRepo.filterQueryList[_supRepo
                                                .storeFilterList[index]
                                                    ['filterQueryName']
                                                .toString()]
                                            .containsKey(_supRepo
                                                .storeFilterList[index]
                                                    ['options'][subIndex]
                                                    ['id']
                                                .toString()) ==
                                        true
                                    ? childActiveStyle
                                    : childStyle)
                                : childStyle),
                      );
                    }));
          },
        ),
      )]
));
}

如您所见,我正在尝试更改子文本颜色。我在 Provider 中执行此操作,但如果不进行热重载,我将看不到颜色变化。当我添加 notifyListeners(); 时,抽屉关闭。

给你看Gif..

https://gifyu.com/image/4DFn

我的问题已解决 我通过删除 scaffoldKey 解决了错误,但我不知道如何在没有 scaffoldKey..

的情况下以编程方式打开抽屉