在 Flutter 中修改来自 children 个小部件的静态变量
Modifying static variable from children widgets in Flutter
有没有办法与所有 children 共享变量?并从那里修改它?
您好,我的 Flutter 应用程序出现问题。我想创建一个全局变量,作为我 object 的所有实例中的参数发送到我的模型,如下所示:
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);
每个 object 都应该添加到 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,
),
),
),
注意:当我直接在代码中修改值时,我必须重新启动整个应用程序才能显示更改。
无论如何,当我进入我的模型时,我有一个方法可以更新 object 本身的数量,它应该也更新 totalAmount 的值,但它没有,而是 parently 它为每个 object 创建一个 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 已准备就绪(问题出在 parent 小部件中,该小部件必须显示受所有children,不在这一个):
BeerTile(
key: UniqueKey(),
beer: beer025,
),
BeerTile(
key: UniqueKey(),
beer: beer033,
),
BeerTile(
key: UniqueKey(),
beer: beer050,
),
BeerTile(
key: UniqueKey(),
beer: beer100,
),
否,删除 UniqueKey(无效)。如果您需要更多详细信息,请告诉我。
totalAmount is the number at the bottom and I want change it by adding beers with the lateral buttons
您正在处理两个不同的问题:1) 更新您的状态以更新屏幕值和 2) 更新您的变量。
这里的问题 Beer beer025 = new Beer(0.25, 0, 1, "025", totalAmount);
是您将 totalAmount 作为 value
传递,而您应该传递 reference
。解决问题的一个简单方法是将其更改为 Map:
Map<String, int> totalAmount = {'value': 0};
// inside your beer instance do:
totalAmount['value'] += amountToAdd;
对于更新屏幕值的第二个问题,您需要调用函数,该函数将从 UI 中的 setState 内部或使用某种状态管理器(如 Provider)更新金额值:
https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple
有没有办法与所有 children 共享变量?并从那里修改它?
您好,我的 Flutter 应用程序出现问题。我想创建一个全局变量,作为我 object 的所有实例中的参数发送到我的模型,如下所示:
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);
每个 object 都应该添加到 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,
),
),
),
注意:当我直接在代码中修改值时,我必须重新启动整个应用程序才能显示更改。
无论如何,当我进入我的模型时,我有一个方法可以更新 object 本身的数量,它应该也更新 totalAmount 的值,但它没有,而是 parently 它为每个 object 创建一个 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 已准备就绪(问题出在 parent 小部件中,该小部件必须显示受所有children,不在这一个):
BeerTile(
key: UniqueKey(),
beer: beer025,
),
BeerTile(
key: UniqueKey(),
beer: beer033,
),
BeerTile(
key: UniqueKey(),
beer: beer050,
),
BeerTile(
key: UniqueKey(),
beer: beer100,
),
否,删除 UniqueKey(无效)。如果您需要更多详细信息,请告诉我。
totalAmount is the number at the bottom and I want change it by adding beers with the lateral buttons
您正在处理两个不同的问题:1) 更新您的状态以更新屏幕值和 2) 更新您的变量。
这里的问题 Beer beer025 = new Beer(0.25, 0, 1, "025", totalAmount);
是您将 totalAmount 作为 value
传递,而您应该传递 reference
。解决问题的一个简单方法是将其更改为 Map:
Map<String, int> totalAmount = {'value': 0};
// inside your beer instance do:
totalAmount['value'] += amountToAdd;
对于更新屏幕值的第二个问题,您需要调用函数,该函数将从 UI 中的 setState 内部或使用某种状态管理器(如 Provider)更新金额值:
https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple