You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter项目模块化后使用Get It依赖注入无法注册Package中的类报错求助

解决GetIt模块化后找不到AuthenticationService的问题

兄弟,看了你的报错和代码,问题其实一目了然——你只在GetIt里注册了DatabaseRepository,但你的StartUpViewModel在尝试获取的AuthenticationService完全没在locator里注册!

先拆解下报错核心

报错信息已经说得非常明确:

类型为AuthenticationService的对象/工厂未在GetIt中注册。(您是否意外写成了GetIt sl=GetIt.instance();而非GetIt sl=GetIt.instance;?是否忘记注册它?)

从调用栈也能定位到,是StartUpViewModel的第13行在尝试获取这个实例,但它根本没被添加到GetIt的注册列表里。

你的代码问题点

看你提供的locator.dart,只完成了DatabaseRepository的注册:

import 'package:user_repo/user_repo.dart';
final locator = GetIt.instance;
void setupLocator() {
 locator.registerLazySingleton<DatabaseRepository>(() =>FirestoreRepo());
 // 这里完全没有AuthenticationService的注册代码!
}

另外关于你担心的「注册外部Package中的类」——完全没问题!你已经成功注册了user_repo包里的DatabaseRepository,说明Package的导入和访问逻辑是正常的,问题不在这。

解决步骤

  1. 注册AuthenticationService
    首先在setupLocator()里补充AuthenticationService的注册,根据这个类的实际实现调整,比如如果它也在user_repo包里:

    import 'package:user_repo/user_repo.dart';
    final locator = GetIt.instance;
    void setupLocator() {
     locator.registerLazySingleton<DatabaseRepository>(() =>FirestoreRepo());
     // 新增AuthenticationService的注册,替换成你的实际实现类
     locator.registerLazySingleton<AuthenticationService>(() => AuthenticationServiceImpl());
    }
    
  2. 确认类的导出权限
    如果AuthenticationService在user_repo包里,要确保它是公开可访问的:

    • 类名首字母必须大写(遵循Dart的public访问规则)
    • 在user_repo.dart里要导出对应的文件,比如:
      library user_repo;
      import 'dart:async';
      import 'package:cloud_firestore/cloud_firestore.dart';
      part 'src/services/firestore_repo.dart';
      part 'src/services/authentication_service.dart'; // 添加上这个part导入
      
  3. 确认setupLocator的调用时机
    一定要在runApp之前调用setupLocator(),比如在main.dart里:

    void main() {
      setupLocator(); // 必须先完成注册再启动App
      runApp(MyApp());
    }
    

做完这几步,你的StartUpViewModel就能正常获取到AuthenticationService的实例了。

内容的提问来源于stack exchange,提问作者chk.buddi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:47:30