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