gpt4 book ai didi

flutter - 无论如何,我可以使用 MultiBlocProvider 来清理这组小部件吗?

转载 作者:行者123 更新时间:2023-12-04 10:10:04 32 4
gpt4 key购买 nike

我正在尝试清理这些乱七八糟的小部件,但我发现没有办法这样做。我的 NavigationBloc取决于 AuthenticationBloc 提供的流为了防止内存泄漏,我必须关闭流。

需要 Builder 小部件,以便我可以获得最新的 BuildContextBlocProvider 提供但我知道 MultiBlocProvider会极大地清理这个。我想避免将此小部件包装在 runApp 中功能,但我猜这是一个选项。

class _MyAppState extends State<MyApp> {
final authRepo = AuthRepo();
AuthenticationBloc authBloc;

@override
void dispose() {
authBloc?.close();
super.dispose();
}

@override
Widget build(BuildContext context) {
return BlocProvider<AuthenticationBloc>(
create: (_) =>
AuthenticationBloc(authRepo: authRepo)..add(InitializeAuth()),
child: Builder(builder: (context) {
authBloc = context.bloc<AuthenticationBloc>();
return BlocProvider<NavigationBloc>(
create: (_) => NavigationBloc(authBloc),
child: MaterialApp(
title: 'Arrow Manager',
debugShowCheckedModeBanner: false,
theme: appTheme(),
builder:
ExtendedNavigator<Router>(router: Router(), initialRoute: '/'),
),
);
}),
);
}
}

最佳答案

正如你所说,你可以使用 MultiProvider避免嵌套提供者

您必须创建您的 AuthenticationBlocinitState()方法

class _MyAppState extends State<MyApp> {
final authRepo = AuthRepo();
AuthenticationBloc authBloc;

@override
void initState() {
super.initState();
authBloc = AuthenticationBloc(authRepo: authRepo);
}

@override
void dispose() {
authBloc?.close();
super.dispose();
}

@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider(
create: (_) => authBloc..add(InitializeAuth()),
),
BlocProvider(
create: (context) => NavigationBloc(authBloc),
),
],
child: Builder(
builder: (context) {
authBloc = context.bloc<AuthenticationBloc>();
return MaterialApp(
title: 'Arrow Manager',
debugShowCheckedModeBanner: false,
theme: appTheme(),
builder: ExtendedNavigator<Router>(router: Router(), initialRoute: '/'),
);
},
),
);
}
}

关于flutter - 无论如何,我可以使用 MultiBlocProvider 来清理这组小部件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61374963/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com