Flutter报错:Closure: (List<dynamic>) => dynamic from Function 'player1'问题
问题原因
你看到的Closure: (List<dynamic>) => dynamic from Function 'player1': static错误,是因为你直接引用了player1函数本身,而没有调用它(即加括号并传入参数)。在Dart中,直接写函数名会返回函数对象(闭包),而不是函数的返回值。
解决步骤
- 正确调用函数:需要用
player1(players)来获取随机玩家,而不是直接写player1。 - 优化函数类型声明:给函数指定明确的参数类型和返回值类型,避免dynamic类型带来的潜在问题。
- 使用状态变量存储结果:直接在
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
相关产品推荐
相关产品推荐

