1.2 KiB
1.2 KiB
LinksyApp 强制依赖 ChatBloc
问题描述
LinksyApp (app.dart) 作为应用根节点,被迫在 MultiBlocProvider 中注入 ChatBloc:
return MultiBlocProvider(
providers: [
BlocProvider<AuthBloc>.value(value: authBloc),
BlocProvider<ChatBloc>(
create: (_) => ChatBloc(apiClient: sl<IApiClient>()),
),
],
...
);
这导致:
- 应用启动时就创建
ChatBloc实例(内存浪费) LinksyApp需要知道"存在 ChatBloc 这个 Feature"- 违反单一职责原则:根节点应只负责全局配置,不应了解具体 Feature
根本原因
HomeScreen 是默认首页,其内部需要 ChatBloc。为了让它通过 context.read<ChatBloc>() 获取,被迫在根节点提供。
正确做法
ChatBloc 应该在路由级别按需注入:
GoRoute(
path: '/',
builder: (context) => BlocProvider(
create: (_) => ChatBloc(apiClient: sl<IApiClient>()),
child: const HomeScreen(),
),
)
相关文件
apps/lib/app/app.dartapps/lib/features/home/presentation/screens/home_screen.dart
修复优先级
中等 - 功能正常但架构不合理,属于技术债