Search code examples
flutterreferencebloc

Flutter Bloc 8.1 - why encountering "this.state invalid reference error"?


I'm using the Bloc state mangement Library - currently the version of the Library is 8.1.1 I've followed some guides and tutorials online , but I encountered an error regarding the reference to "this" in AddItem event functions below:

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 (_) {}

  }
}
     

  }

The error 1:

enter image description here

The error 2:

enter image description here

all helps appreciated :)

Thank you!


Solution

  • Problem solved: The functions _onAddItem.. should be inside the 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 (_) {}
        
          }
        }
             
        
          }
    
          }