【发布时间】:2020-12-14 06:25:00
【问题描述】:
有没有办法与所有孩子共享一个变量?并从那里修改它?
您好,我的 Flutter 应用程序出现问题。我想创建一个全局变量,将其作为参数发送到我的对象的所有实例中,如下所示:
static double totalAmount = 0;
Beer beer025 = new Beer(0.25, 0, 1, "025", totalAmount);
Beer beer033 = new Beer(0.33, 0, 1, "033", totalAmount);
Beer beer050 = new Beer(0.50, 0, 1, "050", totalAmount);
Beer beer100 = new Beer(1.00, 0, 1, "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
这是如何将它传递给我的 BeerTitle 小部件,其中 UI 已准备就绪(问题出在父小部件中,它必须显示受所有子级影响的静态变量的变化,而不是在这个小部件中):
BeerTile(
key: UniqueKey(),
beer: beer025,
),
BeerTile(
key: UniqueKey(),
beer: beer033,
),
BeerTile(
key: UniqueKey(),
beer: beer050,
),
BeerTile(
key: UniqueKey(),
beer: beer100,
),
不,删除 UniqueKey(无效)。如果您需要更多详细信息,请告诉我。
【问题讨论】:
-
在pub.dev寻找提供者或getX库
-
不,它不是,而且有充分的理由。也许您可以用简单的英语描述您想要通过您的应用实现的目标,我们可以建议一种替代方法。
标签: android ios flutter dart widget