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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:17:12