如何在 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..
我的问题已解决 我通过删除 scaffoldKey
解决了错误,但我不知道如何在没有 scaffoldKey
..
的情况下以编程方式打开抽屉
我有一个抽屉来过滤我的产品,我的抽屉是从另一个像这样的飞镖文件导入的。
这是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..
我的问题已解决 我通过删除 scaffoldKey
解决了错误,但我不知道如何在没有 scaffoldKey
..