我发现我们无法使用 valuestatebuilder 刷新类的状态。这对我来说是非常不幸的。因为经过几周的努力,我终于即将完成我的第一个 flutter 应用程序/
问题:我想更新主类的状态。地图存储在另一个中。我已经尝试过: setstate 和 valuenotifier 但都是徒劳的。有人可以告诉我如何克服这个问题以及如何使用listenablebuilder来更新主类吗?谢谢。
示例代码:
// class where the map<> is located.
// totalBill is the variable i want to use the value of in the next class
var totalBill = ValueNotifier({});
Map billl = {};
int temp = 0;
class ReusableCard extends StatefulWidget {
ReusableCard({
required this.itemName .....
...
...
// down in the class:
return GestureDetector(
onTap: () {
setState(() {
totalBill.value[widget.itemName] = temp;
});
},
然后在下一堂课:
ValueListenableBuilder<Map>(
// totalBill is being borrowed from the above example / class
valueListenable: totalBill,
builder: (context, val, _) {
//print(val);
//print(itemsInList);
return Column(
children: [
Text(val.toString()),
....
...
我将不胜感激任何帮助。
ValueNotifier 仅在值更改时发出通知。对于Map,值是参考值。如果里面的值改变了,它也不会改变。
将
onTap
函数更改为以下
onTap((){
totalBill.value[widget.itemName] = temp; // or change the value to whatever you want
totalBill.notifyListeners() // this notifies to all the listeners.
});
ValueNotifier
仅在value
更改时通知。在您的示例中,您不会更改
value
(即
Map
),但您必须。 正确的代码是:
setState(() {
totalBill.value = {widget.itemName: temp};
});