簡體   English   中英

Flutter Bloc 8.1 - 為什么遇到“this.state 無效參考錯誤”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM