赞
踩
Flutter版本:3.16.9
开发IDE:android studio 2023.2.1
以下代码在Android中测试通过,iOS没有试过。以后升级啥的可能会和本方案会有出入,请自行甄别。
当对Container做了LinearGradient渐变填充后,在其child中添加子Widget中包含lnk.image类型的图片按钮,会导致图片无法正常显示,但按钮还可以正常点击的情况,同时点击按钮也不会触发InkWell的水墨效果。
- class _TestPageState extends State<TestPage> {
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- extendBodyBehindAppBar: true,
- body: Column(
- children: [
- Container(
- width: double.infinity,
- padding: const EdgeInsets.only(top: 90),
- decoration: const BoxDecoration(
- gradient: LinearGradient(
- begin: Alignment.topCenter,
- end: Alignment.bottomCenter,
- colors: [
- Color.fromRGBO(21, 169, 113, 1.0),
- Colors.white,
- Colors.white,
- ],
- ),
- ),
- child: Column(
- children: [
- const SizedBox(height: 30,),
- Ink.image(
- width: 60,
- height: 60,
- image:
- const AssetImage(Assets.imagesIIconReport), //特定页面中调用会加载不出图片
- onImageError: (Object exception, StackTrace? stackTrace) {
- debugPrint("加载图片异常了!!!!!");
- },
- fit: BoxFit.fill,
- child: InkWell(
- borderRadius: const BorderRadius.all(Radius.circular(50.0)),
- autofocus: true,
- onTap: () {
- print("点击");
- },
- ),
- ),
- ],
- ),
- ),
- ],
- ),
- );
- }
- }
运行后的效果如下图:
这问题其实很容易解决,(未深入分析问题产生原因,个人猜测问题产生的原因)它的问题是出在Container在填充渐变背景色时和Ink.image中绘图产生了覆盖,填充的渐变背景色显示层级高于包含在内的Ink.image的图片,导致把图片覆盖后产生看不到的原因,但如果为图片按钮添加文字则文字是能正常显示。这个问题当是困扰了我很久,如果文字也不显示那还好说,立马能想到这个覆盖问题。只要把上面代码的填充最后一项颜色变成透明色就可以解决(当然也要取决于你图标按钮显示的位置,需要处在透明色区域)
- gradient: LinearGradient(
- begin: Alignment.topCenter,
- end: Alignment.bottomCenter,
- colors: [
- Color.fromRGBO(21, 169, 113, 1.0),
- Colors.white,
- //Colors.white,
- Color.fromRGBO(255, 255, 255, 0),
- ],
- ),
效果如下图:
这大概可能是一个底层绘图BUG吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。