Flutter中BoxShadow使用Colors.grey.withOpacity(0.5)报错如何解决
报错原因
报错核心原因是BoxDecoration被const关键字修饰,被const修饰的对象要求所有传入属性值必须是编译期可确定的常量。但你在BoxShadow中使用的Colors.grey.withOpacity(0.5)是运行时执行方法计算得到的动态颜色值,不属于编译期常量,违反了const的语法约束,因此触发编译报错。
修复方案
可任选以下一种方案修复:
- 方案1:移除
BoxDecoration前面的const关键字,取消常量约束,动态计算的颜色值即可正常传入,不需要改动其他业务代码。 - 方案2:如果要保留const修饰获得常量优化的性能收益,将动态计算的颜色替换为编译期可确定的常量色值:透明度0.5的标准灰色对应十六进制色值为
const Color(0x809E9E9E),直接用这个值替换Colors.grey.withOpacity(0.5)即可。
修复后可运行完整代码(方案1示例)
import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('Welcome'), ), body: Center( child: Container( alignment: Alignment.topCenter, height: 260, width: 260, // 移除了此处的const关键字 decoration: BoxDecoration( color: Colors.blue, borderRadius: BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(30), bottomLeft: Radius.elliptical(100, 50), bottomRight: Radius.elliptical(70, 150), ), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.5), blurRadius: 10, spreadRadius: 5, offset: Offset(.5, 0), blurStyle: BlurStyle.outer, ), ], ), padding: const EdgeInsets.all(10.0), margin: const EdgeInsets.only(left: 10), child: const Text( 'Hello World!', style: TextStyle( fontSize: 50, color: Colors.white, fontWeight: FontWeight.bold, ), ), ), ), ), )); }
如果选择方案2保留const,只需要将BoxShadow的color参数替换为
color: const Color(0x809E9E9E),同时保留BoxDecoration前的const关键字即可。
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

