flutter - 容器内的墨水/图标按钮颜色
问题描述
我在容器内的 Ink 中有一个 IconButton(给它一个边框)。然而,边框是不可见的,因为它被容器颜色覆盖。
在容器内显示具有彩色背景的 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: () {},
),
),
),
);
}
}
解决方案
使用Material
代替Container
(见官方示例)
原因Container
不起作用是因为 Ink 是在底层Material
小部件上绘制的,如Ink doc中所述:
由 InkWell 和 InkResponse 渲染的墨迹飞溅和高光在实际的底层材质上绘制,在材质上绘制的任何小部件(例如文本和图标)下。如果在材质上绘制不透明图像(可能使用 Container 或 DecoratedBox),则这些墨水效果将不可见,因为它们将被绘制在材质上方的不透明图形完全遮挡。
查看工作演示:
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 Material(
color: Colors.red,
child: Center(
child: Ink(
decoration: const ShapeDecoration(
color: Colors.black,
shape: CircleBorder(),
),
child: IconButton(
icon: Icon(Icons.android),
color: Colors.white,
onPressed: () {},
),
),
),
);
}
}
额外的:
如果你真的需要一个 Container 或其他不是 Material 的小部件,你只需要在 Ink Widget 和父部件之间添加一个 Material 小部件。(透明背景)
像这样:
Container(
color: Colors.red,
child: Material(
color: Colors.transparent,
child: Center(
child: Ink(
decoration: const ShapeDecoration(
color: Colors.black,
shape: CircleBorder(),
),
child: IconButton(
icon: Icon(Icons.android),
color: Colors.white,
onPressed: () {},
),
),
),
))
推荐阅读
- javascript - 多条件过滤器
- angular - 如何在量角器中实现 AutoIt
- android - Firestore 侦听器使用 DocumentChange.Type ADDED 获取文档(忽略缓存的数据)
- laravel - Blade 模板中的雄辩问题
- shell - 用于查找文本文件单行上出现的模式/单词的最长连续简单重复的 Shell 命令
- mysql - 如何从表中选择随机记录
- java - JavaFX - 应用程序:仅从导出的 jar 文件中显示主要阶段,而在 Eclipse 中显示所有对话框,为什么会有这种差异?
- airflow - Airflow DAG 触发但机器人运行任务
- command-line - save session for zap
- python - 在 Python 函数中返回布尔值的首选方法是什么?