Flutter 容器内的墨水/图标按钮颜色

Flutter 容器内的墨水/图标按钮颜色,flutter,Flutter,我有一个IconButton在一个容器内的墨水中(给它一个边框)。但是,边框不可见,因为它被容器颜色覆盖 在容器内以彩色背景显示图标按钮的最佳方式是什么 工作示例: import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) {

我有一个IconButton在一个容器内的墨水中(给它一个边框)。但是,边框不可见,因为它被容器颜色覆盖

在容器内以彩色背景显示图标按钮的最佳方式是什么

工作示例:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
  return Container(
    color: Colors.pink,
    child: Center(
      child: Ink(
        decoration: const ShapeDecoration(
          color: Colors.black,
          shape: CircleBorder(),
        ),
        child: IconButton(
          icon: Icon(Icons.android),
          color: Colors.white,
          onPressed: () {},
        ),
      ),
    ),
  );
}

}

使用
材料
代替
容器

容器
不起作用的原因是墨水被绘制在底层的
材料
小部件上,如下所述:

墨水飞溅和高光,由InkWell和InkResponse渲染, 在任何小部件下绘制实际的底层材质 在材质(例如文本和图标)上绘制。如果是不透明的图像 在材料上绘制(可能使用容器或装饰盒), 这些墨水效果将不可见,因为它们将完全可见 被材质上方绘制的不透明图形遮挡

请参阅工作演示:

导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:中(
子项:MyWidget(),
),
),
);
}
}
类MyWidget扩展了无状态Widget{
@凌驾
小部件构建(构建上下文){
退货(
颜色:颜色,红色,
儿童:中心(
孩子:墨水(
装饰:const ShapeDecoration(
颜色:颜色,黑色,
形状:CircleBorder(),
),
孩子:我的钮扣(
图标:图标(Icons.android),
颜色:颜色,白色,
按下:(){},
),
),
),
);
}
}
额外:

如果你真的需要一个容器或其他非物质的小部件,你只需要在Ink小部件和父部件之间添加一个物质小部件。(背景透明)

像这样:


容器(
颜色:颜色,红色,
儿童:材料(
颜色:颜色。透明,
儿童:中心(
孩子:墨水(
装饰:const ShapeDecoration(
颜色:颜色,黑色,
形状:CircleBorder(),
),
孩子:我的钮扣(
图标:图标(Icons.android),
颜色:颜色,白色,
按下:(){},
),
),
),
))