[英]Flutter Bloc-why i am getting error state as output while using bloc ,
[英]Flutter Bloc 8.1 - why encountering "this.state invalid reference error"?
我正在使用 Bloc state 管理庫 - 目前庫的版本是 8.1.1 我已經在線遵循了一些指南和教程,但我遇到了關於在下面的 AddItem 事件函數中引用“this”的錯誤:
import 'dart:async';
import 'package:foodapptest/models/basket_model.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../models.dart';
import 'package:foodapptest/ResturantMenuItem.dart';
part 'basket_event.dart';
part 'basket_state.dart';
class BasketBloc extends Bloc<BasketEvent,BasketState>
//TO do fix bloc
{
BasketBloc() : super(BasketLoading()) {
on<BasketStart>(_onStartBasket);
on<ItemAdd>(_onAddItem);
}
}
Future<void> _onStartBasket(
BasketStart event,
Emitter<BasketState> emit,
) async {
emit( BasketLoading());
try{
emit(BasketLoaded(basket: Basket(),),);
}catch (e) {
print(e);
}
}
Future<void> _onAddItem(
ItemAdd event,
Emitter<BasketState> emit,
) async {
final state = this.state;
if(state is BasketLoaded) {
try {
emit(BasketLoaded(basket: state.basket.copyWith(items: List.from(state.basket.items)..add(event.item))));
} catch (_) {}
}
}
}
錯誤1:
錯誤2:
所有幫助表示贊賞:)
謝謝!
問題已解決:函數 _onAddItem.. 應該在 class 內。
import 'dart:async';
import 'package:foodapptest/models/basket_model.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../models.dart';
import 'package:foodapptest/ResturantMenuItem.dart';
part 'basket_event.dart';
part 'basket_state.dart';
class BasketBloc extends Bloc<BasketEvent,BasketState>
//TO do fix bloc
{
BasketBloc() : super(BasketLoading()) {
on<BasketStart>(_onStartBasket);
on<ItemAdd>(_onAddItem);
}
Future<void> _onStartBasket(
BasketStart event,
Emitter<BasketState> emit,
) async {
emit( BasketLoading());
try{
emit(BasketLoaded(basket: Basket(),),);
}catch (e) {
print(e);
}
}
Future<void> _onAddItem(
ItemAdd event,
Emitter<BasketState> emit,
) async {
final state = this.state;
if(state is BasketLoaded) {
try {
emit(BasketLoaded(basket: state.basket.copyWith(items: List.from(state.basket.items)..ad
d(event.item))));
} catch (_) {}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.