Flutter错误求助:命名参数未定义及位置参数缺失问题
解决Flutter依赖注入参数不匹配问题
问题原因
你遇到的错误核心是参数传递方式不匹配:NumberTriviaRepositoryImpl的构造函数定义的是位置参数,但你在注入依赖时用了命名参数的语法传值,Dart无法识别这些未定义的命名参数,同时因为没按要求传递位置参数,所以抛出"缺少3个位置参数"的错误。
解决方案
两种方式任选其一即可:
方案1:将构造函数改为命名参数(推荐)
这种方式更直观,依赖注入时能明确对应每个参数的依赖,避免顺序错误。修改number_trivia_repository_impl.dart的构造函数:
class NumberTriviaRepositoryImpl implements NumberTriviaRepository { final NumberTriviaRemoteDataSource remoteDataSource; final NumberTriviaLocalDataSource localDataSource; final NetworkInfo networkInfo; // 改为命名参数,使用Dart 2.12+的required关键字 NumberTriviaRepositoryImpl({ required this.remoteDataSource, required this.localDataSource, required this.networkInfo, });
修改后,你原来在injection_container.dart里的命名参数注入代码就能正常运行。
方案2:按位置顺序传递依赖
如果不想修改构造函数,就严格按照构造函数的参数顺序传递依赖,去掉命名参数语法:
// Repository sl.registerLazySingleton<NumberTriviaRepository>( () => NumberTriviaRepositoryImpl( sl(), // 对应第一个位置参数remoteDataSource sl(), // 对应第二个位置参数localDataSource sl(), // 对应第三个位置参数networkInfo ), );
⚠️ 注意:这里的参数顺序必须和构造函数里的定义完全一致,否则会导致依赖注入混乱。
内容的提问来源于stack exchange,提问作者Mou Rani Biswas
相关产品推荐
相关产品推荐

