保持获取失败断言:布尔表达式不能为null错误flutter


不确定我做错了什么。我已经查看了我目前拥有的代码,似乎不明白它为什么会抛出那个错误。我不完全确定我是否理解我的代码出了什么问题。

Visual Studio代码告诉我错误在product_item类的第40行

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../screens/product_detail_screen.dart';
import '../providers/product.dart';
import '../providers/cart.dart';
import '../providers/auth.dart';
class ProductItem extends StatelessWidget {
// final String id;
// final String title;
// final String imageUrl;
// ProductItem(this.id, this.title, this.imageUrl);
@override
Widget build(BuildContext context) {
final product = Provider.of<Product>(context, listen: false);
final cart = Provider.of<Cart>(context, listen: false);
final authData = Provider.of<Auth>(context, listen: false);
return ClipRRect(
borderRadius: BorderRadius.circular(10),
child: GridTile(
child: GestureDetector(
onTap: () {
Navigator.of(context).pushNamed(
ProductDetailScreen.routeName,
arguments: product.id,
);
},
child: Image.network(
product.imageUrl,
fit: BoxFit.cover,
),
),
footer: GridTileBar(
backgroundColor: Colors.black87,
leading: SizedBox(
width: MediaQuery.of(context).size.width * .020,
child: Consumer<Product>(
builder: (ctx, product, _) => IconButton(
icon: Icon(
product.isFavorite ? Icons.favorite : Icons.favorite_border,
),
color: Theme.of(context).accentColor,
onPressed: () {
product.toggleFavoriteStatus(authData.token);
},
),
),
),
title: Text(
product.title,
textAlign: TextAlign.center,
),
trailing: IconButton(
icon: Icon(
Icons.shopping_cart,
),
onPressed: () {
cart.addItem(product.id, product.price, product.title);
Scaffold.of(context).hideCurrentSnackBar();
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(
'Added item to cart!',
),
duration: Duration(seconds: 2),
action: SnackBarAction(
label: 'UNDO',
onPressed: () {
cart.removeSingleItem(product.id);
},
),
),
);
},
color: Theme.of(context).accentColor,
),
),
),
);
}
}

这是产品类,程序应该在其中获得产品的喜爱状态。

import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
class Product with ChangeNotifier {
final String id;
final String title;
final String description;
final double price;
final String imageUrl;
bool isFavorite;
Product({
@required this.id,
@required this.title,
@required this.description,
@required this.price,
@required this.imageUrl,
this.isFavorite = false,
});
void _setFavValue(bool newValue) {
isFavorite = newValue;
notifyListeners();
}
Future<void> toggleFavoriteStatus(String token) async {
final oldStatus = isFavorite;
isFavorite = !isFavorite;
notifyListeners();
final url =
'https://flutter-shopapp-b4a66-default-rtdb.firebaseio.com/products/$id.json?auth=$token';
try {
final response = await http.patch(
url,
body: json.encode({
'isFavorite': isFavorite,
}),
);
if (response.statusCode >= 400) {
_setFavValue(oldStatus);
}
} catch (error) {
_setFavValue(oldStatus);
}
}
}

我可能错了,但我相信您使用的是不使用零安全的旧版本Flutter。这意味着isFavorite可能是null

尝试更改此线路

product.isFavorite ? Icons.favorite : Icons.favorite_border

product.isFavorite == true ? Icons.favorite : Icons.favorite_border

最新更新