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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:45:28