Flutter中如何将FlatButton.icon转换为TextButton?
FlatButton废弃后,TextButton将样式相关参数统一整合到了ButtonStyle中,直接迁移参数会报错,以下是完全匹配原有效果的转换代码:
TextButton.icon( onPressed: () {}, style: ButtonStyle( // 替代原minWidth: double.infinity,让按钮占满父容器宽度 minimumSize: MaterialStateProperty.all(Size(double.infinity, 0)), // 原padding参数迁移到这里 padding: MaterialStateProperty.all(EdgeInsets.symmetric( vertical: kDefaultPadding, )), // 原shape参数迁移到这里 shape: MaterialStateProperty.all(RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), )), // 原color参数迁移为backgroundColor backgroundColor: MaterialStateProperty.all(kPrimaryColor), ), icon: WebsafeSvg.asset("assets/Icons/Edit.svg", width: 16), label: Text( "New message", style: TextStyle(color: Colors.white), ), ).addNeumorphism( topShadowColor: Colors.white, bottomShadowColor: Color(0xFF234395).withOpacity(0.2), ),
关键参数对应说明:
minWidth: double.infinity→ 通过ButtonStyle的minimumSize设置Size(double.infinity, 0),确保按钮横向占满可用空间- 原直接传入的
padding、shape、color(背景色)都需要包裹在MaterialStateProperty.all()中,作为ButtonStyle的对应属性值 - TextButton.icon的核心回调
onPressed仍保留为直接参数,无需迁移
不需要用ConstrainedBox包裹,通过ButtonStyle的minimumSize就能实现原minWidth的效果,同时避免样式参数冲突问题。
内容的提问来源于stack exchange,提问作者best_of_man
相关产品推荐
相关产品推荐

