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

Flutter报错:Closure: (List<dynamic>) => dynamic from Function 'player1'问题

问题原因

你看到的Closure: (List<dynamic>) => dynamic from Function 'player1': static错误,是因为你直接引用了player1函数本身,而没有调用它(即加括号并传入参数)。在Dart中,直接写函数名会返回函数对象(闭包),而不是函数的返回值。

解决步骤
  1. 正确调用函数:需要用player1(players)来获取随机玩家,而不是直接写player1。
  2. 优化函数类型声明:给函数指定明确的参数类型和返回值类型,避免dynamic类型带来的潜在问题。
  3. 使用状态变量存储结果:直接在Text里调用函数会导致每次Widget重建时都生成新的随机值,建议用状态变量保存选中的玩家,确保只有点击按钮时才更新。
修改后的完整代码
import 'package:flutter/material.dart';
import 'dart:math';

List<String> players = ["Alice", "Jane", "Susan"];

// 明确指定参数和返回值类型
String player1(List<String> players) {
  return players[Random().nextInt(players.length)];
}

class RandPlay extends StatefulWidget {
  const RandPlay({Key? key}) : super(key: key);

  @override
  State<RandPlay> createState() => _RandPlayState();
}

class _RandPlayState extends State<RandPlay> {
  // 状态变量存储选中的玩家
  String selectedPlayer = '';

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: [
          ElevatedButton(
              onPressed: () {
                setState(() {
                  // 调用函数并更新状态
                  selectedPlayer = player1(players);
                  print(selectedPlayer);
                });
              },
              child: const Text("Random")),
          // 显示状态变量中的值
          Text(selectedPlayer),
        ],
      ),
    );
  }
}
额外说明
  • 原代码中全局的tempPlayer变量没有被用到,可以直接移除。
  • 给Text组件的文本加上const修饰符,能优化Widget性能。

内容的提问来源于stack exchange,提问作者Entrebear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:24:17