Files
social-app/docs/bugs/LinksyApp强制依赖ChatBloc.md
T

1.2 KiB
Raw Blame History

LinksyApp 强制依赖 ChatBloc

问题描述

LinksyApp (app.dart) 作为应用根节点,被迫在 MultiBlocProvider 中注入 ChatBloc

return MultiBlocProvider(
  providers: [
    BlocProvider<AuthBloc>.value(value: authBloc),
    BlocProvider<ChatBloc>(
      create: (_) => ChatBloc(apiClient: sl<IApiClient>()),
    ),
  ],
  ...
);

这导致:

  1. 应用启动时就创建 ChatBloc 实例(内存浪费)
  2. LinksyApp 需要知道"存在 ChatBloc 这个 Feature"
  3. 违反单一职责原则:根节点应只负责全局配置,不应了解具体 Feature

根本原因

HomeScreen 是默认首页,其内部需要 ChatBloc。为了让它通过 context.read<ChatBloc>() 获取,被迫在根节点提供。

正确做法

ChatBloc 应该在路由级别按需注入:

GoRoute(
  path: '/',
  builder: (context) => BlocProvider(
    create: (_) => ChatBloc(apiClient: sl<IApiClient>()),
    child: const HomeScreen(),
  ),
)

相关文件

  • apps/lib/app/app.dart
  • apps/lib/features/home/presentation/screens/home_screen.dart

修复优先级

中等 - 功能正常但架构不合理,属于技术债