Я использую флаттер для создания корзины покупок, и когда я реализовал ChangeNotifierProvider в root приложения. Но при запуске эта ошибка продолжает появляться
I/flutter ( 8082): The following NoSuchMethodError was thrown building HomeScreen(dirty, dependencies:
I/flutter ( 8082): [InheritedProvider<CartState>], state: _HomeScreenState#10643):
I/flutter ( 8082): The getter 'length' was called on null.
I/flutter ( 8082): Receiver: null
I/flutter ( 8082): Tried calling: length
I/flutter ( 8082):
I/flutter ( 8082): The relevant error-causing widget was:
I/flutter ( 8082): HomeScreen file:///C:/Users/Owner/FlutterProjects/an/appfrontend/lib/main.dart:92:17
Я знаю, что не предоставил много информации. Это очевидно из-за того, что свойство при запуске имеет значение null, но как я могу решить это при запуске. Вот код провайдера. Пока вы работаете, я был бы очень признателен, если бы вы указали на логическую ошибку в методе buildProduct. Я не чувствовал себя хорошо, пока писал это :). Спасибо, любая помощь будет оценена.
class CartState extends ChangeNotifier {
List<CartItem> _cartItems;
List<CartItem> get cartItems => _cartItems;
void buildProduct(Product product, {int quantity = 1}) {
for (int i = 0; i < _cartItems.length; i++) {
if (_cartItems[i].product.id == product.id) {
if (_cartItems.length > 1) {
String id = _cartItems[i].product.merchantId;
if (product.merchantId == id)
_cartItems[i].quantity += quantity;
else
throw Exception(
"Cannot place two orders from separate Restaurants in one go. Please Place a separate order.",
);
}
}
}
CartItem newItem = CartItem(product, quantity);
_cartItems.add(newItem);
notifyListeners();
}
}
Код, который я использовал в файле main.dart:
Widget build(BuildContext context) {
return GraphQLProvider(
client: client,
child: ChangeNotifierProvider<CartState>(
create: (_) => CartState(),
lazy: true,
child: CacheProvider(
child: ChangeNotifierProvider<AppState>(
create: (_) => AppState(),
child: MaterialAppWidget(auth: auth),
),
),
),
);
}