Flutter使用Dart对接Cloud Firestore报位置参数缺失错误如何解决?
Flutter/Dart 「1 positional argument(s) expected, but 0 found.」报错修复
报错根因
该报错由构造函数的参数定义规则和调用时的传参方式不匹配导致:
你定义UserTile构造函数时,Sport类型的sport参数属于位置参数(未被大括号包裹),调用时必须直接传值,不能加参数名前缀;但你在ListView.builder中调用UserTile时使用了UserTile(sport: users[index])的命名参数传参形式,不符合参数规则。
另外你构造函数中定义的{users}可选命名参数全程没有被使用,属于冗余代码,建议清理。
修复方案(二选一即可)
方案1:调整调用方式,匹配位置参数规则
直接修改ListView.builder中的调用代码,去掉参数名前缀sport::
return ListView.builder( itemCount: users.length, itemBuilder: (context, index){ return UserTile(users[index]); }, );
方案2:调整构造函数定义,改为命名参数形式
如果希望调用时可以明确指定参数名提升可读性,就把sport参数调整为必填命名参数:
class UserTile extends StatelessWidget { final Sport sport; // 把sport放入大括号内,空安全场景下必填参数加required修饰,可按需添加super.key const UserTile({required this.sport}); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only(top: 8.0), child: Card( margin: const EdgeInsets.fromLTRB(20.0, 6.0, 20.0, 0.0), child: ListTile( leading: CircleAvatar( radius: 25.0, backgroundColor: Colors.brown[100], ), title: Text(sport.name), subtitle: Text('User plays ${sport.sport}'), ), ), ); } }
内容的提问来源于stack exchange,提问作者Something You
相关产品推荐
相关产品推荐

