提供程序变量 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();
}
// ...
}
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();
}
// ...
}