Flutter中onPressed: () {}失效,报“Not a constant expression”错误
解决Flutter中“Error: Not a constant expression.”错误
错误原因
你给MaterialApp、Scaffold这些组件加了const修饰,但TextButton的onPressed是个匿名函数——匿名函数不属于常量表达式,没法被编译成常量值,所以触发了这个错误。
修复代码
直接去掉MaterialApp前面的const,同时修正你代码里Audiocache的拼写错误(应该是AudioCache),修改后的完整代码如下:
import 'package:flutter/material.dart'; import 'package:audioplayers/audioplayers.dart'; void main() { runApp(const XylophoneApp()); } class XylophoneApp extends StatelessWidget { const XylophoneApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: SafeArea( child: Center( child: TextButton( onPressed: () { final player = AudioCache(); player.play('note1.wav'); }, child: const Text('Click Me'), ), ), ), ), ); } }
新项目遇同错的排查方向
如果新建项目也出这个问题,检查是不是给带以下内容的组件加了const:
- 带
onPressed、onTap这类匿名函数回调的组件 - 包含动态数据、可变状态的组件
- 用了非常量参数的组件
把这些组件及其父组件的const去掉就行。
内容的提问来源于stack exchange,提问作者Sakuleta
相关产品推荐
相关产品推荐

