问题描述
嗨,我的Flutter应用程序出现问题。我想创建一个全局变量,将其作为参数发送给模型的实例中的所有参数,如下所示:
static double totalAmount = 0;
Beer beer025 = new Beer(0.25,1,"025",totalAmount);
Beer beer033 = new Beer(0.33,"033",totalAmount);
Beer beer050 = new Beer(0.50,"050",totalAmount);
Beer beer100 = new Beer(1.00,"100",totalAmount);
每个对象都可以在构造函数的第一个参数中添加totalAmount
变量。 (0.25,0.50 ...)。
然后我将此静态变量添加到我的UI中,以跟踪总数:
Container(
padding: EdgeInsets.only(left: 5),child: Text(
"$totalAmount",style: TextStyle(
fontSize: 40,color: Theme.of(context).accentColor,fontWeight: FontWeight.bold,),
注意:当我直接在代码中修改值时,我必须重新启动整个应用程序才能显示更改。
无论如何,当我进入模型时,我有一种方法可以更新对象本身的数量,并且它应该也可以更新totalAmount的值,但实际上并没有,相反,它显然为每个对象创建了totalAmount而不是使用所有这些都是静态的。
代码:
class Beer {
double cuantity;
int amount;
double price;
String image;
double totalAmount;
Beer(this.cuantity,this.amount,this.price,this.image,this.totalAmount);
//////////////////////////////////////
// Add and remove beer from the amount
addBeerAmount(int amountToAdd) {
this.amount += amountToAdd;
// Here we update it
this.totalAmount += this.cuantity * amountToAdd;
print("Adding to beer " +
this.cuantity.toString() +
" // " +
amountToAdd.toString());
print("Total:" + this.totalAmount.toString());
}
输出:
I/Flutter ( 3457): Adding to beer 0.25 // 1
I/Flutter ( 3457): Total:0.25
I/Flutter ( 3457): Adding to beer 0.25 // 1
I/Flutter ( 3457): Total:0.5
I/Flutter ( 3457): Adding to beer 0.33 // 1
I/Flutter ( 3457): Total:0.33
I/Flutter ( 3457): Adding to beer 0.33 // 1
I/Flutter ( 3457): Total:0.66
I/Flutter ( 3457): Adding to beer 0.5 // 1
I/Flutter ( 3457): Total:0.5
I/Flutter ( 3457): Adding to beer 0.5 // 1
I/Flutter ( 3457): Total:1.0
I/Flutter ( 3457): Adding to beer 1.0 // 1
I/Flutter ( 3457): Total:1.0
I/Flutter ( 3457): Adding to beer 1.0 // 1
I/Flutter ( 3457): Total:2.0
这是如何将其传递给我的UI就绪的BeerTitle小部件的问题(问题在父小部件中,该小部件必须显示受所有子级影响的静态变量的更改,而不是在此子级中):
BeerTile(
key: UniqueKey(),beer: beer025,BeerTile(
key: UniqueKey(),beer: beer033,beer: beer050,beer: beer100,
否,删除UniqueKey(无效)。如果您需要更多详细信息,请告诉我。
解决方法
您正在处理两个不同的问题:1)更新状态以更新屏幕值,以及2)更新变量。
这里Beer beer025 = new Beer(0.25,1,"025",totalAmount);
的问题是您要以value
的形式传递totalAmount,而您应该以{{1}}的形式传递。解决该问题的一种简单方法是将其更改为Map:
reference
对于第二个更新屏幕值的问题,您需要调用该函数,该函数将从UI的setState内部或使用诸如Provider之类的状态管理器来更新金额的值:
{ {3}}