簡體   English   中英

未處理的異常:錯誤 state:調用關閉后無法發出新狀態 Flutter

[英]Unhandled Exception: Bad state: Cannot emit new states after calling close Flutter

我正在使用Cubit並嘗試通過Dio獲取數據,這是我的方法

void getShopGift(int categoryID) async {
    emit(GetShopGiftsLoadingState());

    AppConstants.token = CacheHelper.getStringData(key: 'token');
    emit(GetShopGiftsLoadingState());
    await DioHelper.postData(url: GIFTS, data: {
      'category_id': categoryID,
      'token': AppConstants.token,
      'lang': cachedLang
    })!
        .then((value) {
      shopGiftModel = ShopGiftModel.fromJson(value.data);
     

      emit(GetShopGiftsSuccessState());
    }).onError((error, stackTrace) {
      emit(GetShopGiftsErrorState());
    });
  }

這是肘

I/flutter ( 6609): Change { currentState: Instance of 'GetShopGiftsLoadingState', nextState: Instance of 'GetShopGiftsLoadingState' }
E/flutter ( 6609): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot emit new states after calling close
E/flutter ( 6609): #0      BlocBase.emit (package:bloc/src/bloc_base.dart:96:9)
E/flutter ( 6609): #1      RehlatechCubit.getShopGift.<anonymous closure> (package:rehlatech/layout/cubit/rehlatech_cubit.dart:633:7)
E/flutter ( 6609): #2      FutureExtensions.onError.<anonymous closure> (dart:async/future.dart:1013:24)
E/flutter ( 6609): #3      _RootZone.runBinary (dart:async/zone.dart:1658:54)
E/flutter ( 6609): #4      _FutureListener.handleError (dart:async/future_impl.dart:162:22)
E/flutter ( 6609): #5      Future._propagateToListeners.handleError (dart:async/future_impl.dart:778:47)
E/flutter ( 6609): #6      Future._propagateToListeners (dart:async/future_impl.dart:799:13)
E/flutter ( 6609): #7      Future._complete (dart:async/future_impl.dart:557:7)
E/flutter ( 6609): #8      _SyncCompleter.complete (dart:async/future_impl.dart:47:12)
E/flutter ( 6609): #9      Future.any.onValue (dart:async/future.dart:613:45)
E/flutter ( 6609): <asynchronous suspension>
E/flutter ( 6609): #10     Future.any.onValue (dart:async/future.dart:612:5)
E/flutter ( 6609): <asynchronous suspension>
E/flutter ( 6609): 

這是我的 blocprovider

 import 'package:conditional_builder_null_safety/conditional_builder_null_safety.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:rehlatech/models/shop_gift_model.dart'; import 'package:sizer/sizer.dart'; import '../../../layout/cubit/rehlatech_cubit.dart'; import '../../resources/assets_manger.dart'; import '../../resources/color_manger.dart'; import '../../resources/routes_manger.dart'; import '../../widgets/shop_gift_card.dart'; import '../drawer/navigation_drawer_screen.dart'; class ShopGiftScreen extends StatelessWidget { const ShopGiftScreen({Key? key}): super(key: key); @override Widget build(BuildContext context) { var cubit = RehlatechCubit.get(context); ShopGiftModel? model = cubit.shopGiftModel; return BlocProvider( create: (context) => RehlatechCubit()..getCachedLang(), child: BlocConsumer<RehlatechCubit, RehlatechState>( listener: (context, state) { }, builder: (context, state) { return Scaffold( drawer: const NavigationDrawerScreen(), body: Builder( builder: (context) { return SingleChildScrollView( physics: const ScrollPhysics(), child: Column( children: [ Stack( children: [ Container( height: 35.h, decoration: BoxDecoration( image: DecorationImage( colorFilter: ColorFilter.mode( Colors.black.withOpacity(0.6), BlendMode.dstATop), image: const AssetImage(ImageAssets.widget), fit: BoxFit.cover), borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(35), bottomRight: Radius.circular(35)), ), child: const Align( alignment: Alignment.center, child: Image(image: AssetImage(ImageAssets.logoBlack)), ), ), Align( alignment: Alignment.topLeft, child: IconButton( icon: Icon(Icons.menu_rounded, color: ColorManager.black), onPressed: () => Scaffold.of(context).openDrawer(), ), ), Align( alignment: Alignment.topRight, child: IconButton( onPressed: () { Navigator.pushReplacementNamed( context, Routes.gifts); }, icon: Icon( Icons.arrow_forward_ios, color: ColorManager.black, )), ), ], ), SizedBox(height: 1.h), ConditionalBuilder( condition: model,=null && state is: GetShopGiftsLoadingState. builder: (BuildContext context) => ListView.separated( scrollDirection, Axis:vertical, shrinkWrap: true, physics:const NeverScrollableScrollPhysics(), itemBuilder: (context. index) => ShopGiftCard( shopGiftData,model,:data,[index], ): separatorBuilder. (context. index) => const SizedBox(), itemCount:model::data.,length): fallback. (BuildContext context) => Center( child, CircularProgressIndicator( backgroundColor, ColorManager,white, color, ColorManager,primary; ); ), ), ]; ), ); } )); }, ), ); } }

這是錯誤

試圖更改狀態並將其刪除並將方法類型更改為 Future

ShopGiftScreen中刪除您的BlocProvider並將其添加到main.dart頁面中的MyApp()中,在child: MaterialApp上方。

更改后, MyApp()應如下所示

@override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<RehlatechCubit>(
          create: (context) => RehlatechCubit(),
        ),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        home: const HomeScreen(),
      ),
    );
  }

然后將ShopGiftScreen()轉換為有狀態小部件。 在其initState()內部,調用context.read<RehlatechCubit>().getCachedLang(); .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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