如何修复Flutter中toString()调用的参数过多错误
Dart报错:Too many positional arguments: 0 expected, but 1 found
问题场景
在尝试将int类型数据拼接进字符串并添加到List时触发如下错误:
Too many positional arguments: 0 expected, but 1 found. Try removing the extra positional arguments, or specifying the name for named arguments
错误出现在toString(user?.points)这一行。
相关代码
leaderboard.dart
class LeaderBoard extends StatefulWidget { const LeaderBoard({Key? key}) : super(key: key); @override State<LeaderBoard> createState() => _LeaderBoard(); } class _LeaderBoard extends State<LeaderBoard> { @override Widget build(BuildContext context) { List<Widget> _textList = []; final board = Provider.of<List<MyUser?>>(context); for (var user in board) { print(user?.name); print(user?.points); _textList.add( Text("1. " + (user?.name ?? "") + toString(user?.points) + " p")); // 错误行 } print(_textList); return Container(); } }
user.dart
class MyUser { final String? uid; final String? name; final int? points; String? groupId; MyUser({ this.uid, this.name, this.points, this.groupId, }); }
错误原因
你调用的toString()是Dart中Object类的无参实例方法,不能传入任何参数。但你错误地将user?.points作为参数传递给它,导致参数数量不匹配,触发了这个错误。
解决方案
有两种常见的修正方式:
方式1:调用int类型的toString()方法
直接在user?.points后调用toString(),同时处理points为null的情况:
_textList.add( Text("1. " + (user?.name ?? "") + (user?.points?.toString() ?? "") + " p"));
方式2:使用字符串插值(更简洁推荐)
Dart的字符串插值语法可以自动处理类型转换,写法更简洁易读:
_textList.add( Text("1. ${user?.name ?? ""} ${user?.points ?? 0} p"));
这里用?? 0处理points为null的情况,你可以根据需求调整为?? ""来显示空字符串。
内容的提问来源于stack exchange,提问作者Aslak Aarflot Jønsson
相关产品推荐
相关产品推荐

