簡體   English   中英

我的 cubit 沒有發出新的 state 凍結?

[英]My cubit is not emitting a new state with freezed?

我正在嘗試使用 Cubit 進行 state 管理,我有一個帶有@freezed注釋的 state class。 我以前用過 cubits,之前沒有看到任何類似的問題。 在 cubit 構造函數中,我使用超級構造函數發出初始 state, BLocBuilder捕獲初始 state。然后,每當我發出新的 state 時,我的 cubit 實際上沒有發出。 這是我的代碼的樣子:

promotion_state.dart

part of 'promotion_cubit.dart';

@freezed
abstract class PromotionState with _$PromotionState {
  const factory PromotionState.initial() = _Initial;
  const factory PromotionState.loaded({required TrophyIconType trophyIconType}) = _Loaded;
}

promotion_cubit.dart


Future<void> whenMenuPageDisplayed() async {
  emit(const PromotionState.loaded(trophyIconType: TrophyIconType.withAnimation));
}

menu_page.dart

return BlocProvider<PromotionCubit>(
      create: (_) => getIt<PromotionCubit>()..init(),
      child: BlocBuilder<PromotionCubit, PromotionState>(
        builder: (context, state) => state.maybeWhen(
          initial: () => const SizedBox.shrink(),
          loaded: (trophyIconType) {
            print(state);
            return _TrophyIcon(trophyIconType);
          },
          orElse: () => const SizedBox.shrink(),
        ),
      ),
    );

我在哪里調用whenMenuPageDisplayed function:


@injectable
class MyNavigatorObserver extends NavigatorObserver {
  MyNavigatorObserver(this._promotionCubit);

  final PromotionCubit _promotionCubit;

  @override
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
    if (route.settings.name == '/menu') {
      _promotionCubit.whenMenuPageDisplayed();
    }
  }

  @override
  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
    if (previousRoute!.settings.name == '/menu') {
      _promotionCubit.whenMenuPageDisplayed();
    }
  }
}

print(state); 在 Loaded state 沒有在終端中顯示任何 output。

對於那些在進行谷歌搜索時偶然發現這個問題的人來說,問題在於 getIt 在被請求時正在創建 cubit 的新實例。

解決方案是在作者的案例中用 @singleton 或 @lazySingleton 注釋 cubit class。

暫無
暫無

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

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