【发布时间】:2021-10-19 15:36:10
【问题描述】:
我是 Flutter 的新手。我正在做一个项目,并使用 HIVE 进行本地存储,使用 Provider 进行状态管理。我做了一个购物车部分,我将所有添加到本地存储的购物车中的菜串起来,我想在该屏幕上显示购物车的总量。这是我的 HIVE 对象:
@HiveType(typeId: 0)
class DishHive extends HiveObject {
DishHive({
required this.dishId,
required this.dishName,
required this.dishDescription,
required this.dishImage,
required this.dishPrice,
this.quantity,
});
@HiveField(0)
String dishId;
@HiveField(1)
String dishName;
@HiveField(2)
String dishDescription;
@HiveField(3)
List<int> dishImage;
@HiveField(4)
int dishPrice;
@HiveField(5)
int? quantity;}
我还创建了一个提供程序类的函数,它将帮助我使用 HIVE 进行 CRUD 操作,以及一个为我提供购物车总数的函数。
class CartFunctions extends ChangeNotifier {
int Total = 0;
List<DishHive> cartItems = [];
void setTotal(int total) {
Total = total;
}
void onChange() {
notifyListeners();
}
getCartTotal() async {
List<DishHive> listDish = [];
int TotalofCart = 0;
final box = await Hive.openBox<DishHive>('toCart');
listDish = box.values.toList();
listDish.forEach((element) {
TotalofCart = TotalofCart + (element.dishPrice * element.quantity!);
});
print('Total: $TotalofCart');
setTotal(TotalofCart);
//notifyListeners();
return Total;
}
下面是我要获取总数的地方。
trailing: FutureBuilder<dynamic>(
future: cartObj.getCartTotal(),
builder: (BuildContext context,
AsyncSnapshot<dynamic> snap) {
if (snap.connectionState ==
ConnectionState.active) {
return CircularProgressIndicator(
color: const Color(0xFF265cff),
);
} else if (snap.hasData) {
print('Final Total: ${snap.data}');
return Text(snap.data.toString());
}
return Text('0');
},
),
我面临的问题是在第二个代码 sn-p 中声明的总值始终保持为 0。它只在 getCartTotal 函数内给我总值,但只有在我更新后才会在 UI 中更新来回刷新或切换页面。我要实时更新。 我也是 Stack Overflow 的新手,如果我在某个地方错了,请告诉我。 提前致谢。
【问题讨论】:
标签: flutter flutter-dependencies