提供程序变量 returns 最初为空值

Provider variables returns null value initially

Provider Controller 中的变量值 returns 重新加载应用时为 null。

我的应用栏的购物车图标实际上显示了如何将商品添加到购物车。但是当我第一次启动应用程序时,它显示 null 如下所示

但是当我将产品添加到购物车时,它会正确显示添加的商品数量。

这是我的应用栏购物车通知图标代码,它是 Stack 中的一个文本小部件。

 "${Provider.of<CartProvider>(context, listen: true).cart_notification}",

您的 cart_notification 字段最初为空。仅当 cart_notification 字段不为空时才应绘制徽章。

试试这样的:

Provider.of<CartProvider>(context).cart_notification != null ? Text(Provider.of<CartProvider>(context).cart_notification.toString()) : SizedBox.shrink();

如果您想在应用程序启动时显示 0,您只需像这样初始 cart_notification

class CartProvider extends ChangeNotifier {
// ...
  int cart_notification = 0;
// ...
}

但是如果你不想在应用程序启动时不显示任何内容,你可以这样做:

    final cartProvider = Provider.of<CartProvider>(context);
    final themeData = Theme.of(context);
    // ...
    cartProvider.cart_notification != null
        ? Container(
            decoration: const BoxDecoration(
              borderRadius: BorderRadius.all(Radius.circular(5.0)),
              color: Colors.black,
            ),
            padding: const EdgeInsets.all(2.0),
            child: Text(
              "${cartProvider.cart_notification}",
              style: themeData.textTheme.bodyText2!.apply(
                color: Colors.white,
              ),
            ),
          )
        : const SizedBox.shrink(),

更新:
并且您必须在 getallcart 方法中更新 cart_Notification

class CartProvider extends ChangeNotifier {
// ...
  Future<void> getallcart() async {
    cartproducts = await database.fetchall();
    cart_notification = await database.cartNotificationNumber(); // add this line
    notifyListeners();
  }
// ...
}