dart - 如何根据背景图像更改文本颜色 - Flutter
问题描述
我想根据背景图像更改文本(和图标)颜色以提高可见性。
我尝试过: 使用palette_generator包检查背景图像的主色,并使用flutter_statusbarcolor包中的WhiteForgroundForColor 函数(返回布尔值)来为我的文本(和图标)颜色选择黑色或白色。
问题:有时主色变为空。在我的测试中,这发生在黑色和白色上,我不知道有什么方法可以找出哪一种。
Future<bool> useWhiteTextColor(String imageUrl) async {
PaletteGenerator paletteGenerator =
await PaletteGenerator.fromImageProvider(
NetworkImage(imageUrl),
// Images are square
size: Size(300, 300),
// I want the dominant color of the top left section of the image
region: Offset.zero & Size(40, 40),
);
Color dominantColor = paletteGenerator.dominantColor?.color;
// Here's the problem
// Sometimes dominantColor returns null
// With black and white background colors in my tests
if (dominantColor == null) print('Dominant Color null');
return useWhiteForeground(dominantColor);
}
我找到了其他语言的其他方法,但我不知道在 dart 中实现相同方法的方法。
附加说明:我的实际代码包括一些额外的复杂性。我正在使用 SliverAppBar,在这里我想确定flexibleSpace 展开时的标题和图标颜色。基于此,我在社区的帮助下崩溃时更改了它们的颜色。
解决方案
颜色类已经有一个计算亮度的方法,称为computeLuminance()
Color textColor = color.computeLuminance() > 0.5 ? Colors.black : Colors.white;
推荐阅读
- java - Java BasicDataSource 连接时卡住
- sql - 如何将此“2021 年 6 月 28 日 10:52:16 CDT (GMT-0500)”转换为 2021 年 6 月 28 日
- flutter - Riverpod - 以更好/优雅的方式创建具有异步依赖的服务
- javascript - 如何在 Typescript 的回调中访问类变量/方法?
- reactjs - 如何在子组件中传递道具以使用打字稿做出本机反应
- java - 来自具有 API 30 (android 11) 的三星物理模拟器的错误 Android 11 -> java.net.SocketTimeoutException
- javascript - 重命名所有键的对象JS
- javascript - 有没有办法让代码执行暂停 1 毫秒?我现在能做的最好是5ms左右
- pandas - 熊猫:读取具有不同格式的列中的日期
- html - 如何检查是否选中了相应的复选框,以便在我重新启用单击的复选框时启用某些复选框?