我有一個使用 Cubit 構建的應用程式,我有兩個頁面 A 和 B。每件事都可以自己正常作業。我在兩頁上都使用了更改狀態肘,但是當我移動到第二頁并彈出回傳第一頁時,我在標題上看到了錯誤。我使用 get it 注入依賴項
路線A
routes: {
'/home': (context) => MultiBlocProvider(providers: [
BlocProvider<ChangeStatusCubit>(
create: (context) => locator<ChangeStatusCubit>(),
),
], child: const TodoHomePage()),
路線 B
'/details': (context) => MultiBlocProvider(
providers: [
BlocProvider<ChangeStatusCubit>(
create: (context) => locator<ChangeStatusCubit>(),
),
],
child: TodoDetailsPage(),
依賴注入
locator.registerLazySingleton<ChangeStatusCubit>(() => ChangeStatusCubit(
locator(),
));
肘
changeStatus(int id) async {
emit(ChangeStatusLoading());
try {
ResponseModel response = await _changeStatusUseCase(id);
if (response.status == 200) {
emit(ChangeStatusLoaded(response.data));
} else {
emit(ChangeStatusError(response.error?.todo?.first ?? ""));
}
} catch (e) {
emit(ChangeStatusError(e.toString()));
}
}
uj5u.com熱心網友回復:
當您用于create初始化BlocProvider's bloc 時,該 bloc 的流將在BlocProvider卸載時關閉。
要解決這個問題,您可以在小部件樹中將 BlocProvider 向上移動,以便它在頁面之間保持掛載,或者您可以使用BlocProvider.value建構式。
后者可能是最好的,因為您實際上并沒有創建一個塊,而是使用了一個預先存在的單例。盡管將小部件向上移動也是有意義的,因此它是Navigator- 這樣您可以只宣告一次并減少代碼重復的父級。
但是,保留示例中的結構,您的代碼可能如下所示:
routes: {
'/home': (context) => MultiBlocProvider(
providers: [
BlocProvider.value<ChangeStatusCubit>(
value: locator<ChangeStatusCubit>(),
),
],
child: const TodoHomePage(),
),
'/details': (context) => MultiBlocProvider(
providers: [
BlocProvider<ChangeStatusCubit>.value(
value: locator<ChangeStatusCubit>(),
),
],
child: TodoDetailsPage(),
),
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/512883.html
標籤:扑镖集团颤振块肘
