Dart 如何根据背景图像改变文本颜色-颤振

Dart 如何根据背景图像改变文本颜色-颤振,dart,flutter,textcolor,Dart,Flutter,Textcolor,我想根据背景图像更改文本(和图标)颜色以提高可见性 我试过了: 使用package,检查背景图像的主色,并使用package中的WhiteForGroundForColor函数(返回bool)为我的文本(和图标)颜色选择黑色或白色 问题:有时主色变成空。在我的测试中,这种情况发生在黑色和白色之间,我不知道有什么方法可以找出哪一种 Future<bool> useWhiteTextColor(String imageUrl) async { PaletteGenerator pal

我想根据背景图像更改文本(和图标)颜色以提高可见性

我试过了: 使用package,检查背景图像的主色,并使用package中的WhiteForGroundForColor函数(返回bool)为我的文本(和图标)颜色选择黑色或白色

问题:有时主色变成空。在我的测试中,这种情况发生在黑色和白色之间,我不知道有什么方法可以找出哪一种

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);
}
未来使用WhiteTextColor(字符串imageUrl)异步{
调色板生成器调色板生成器=
等待PaletteGenerator.fromImageProvider(
网络图像(imageUrl),
//图像是方形的
尺寸:尺寸(300300),
//我想要图像左上部分的主色
区域:偏移量0和大小(40,40),
);
Color DOMINATCOLOR=调色板生成器.DOMINATCOLOR?.Color;
//问题出在这里
//有时主色返回null
//在我的测试中使用黑白背景色
如果(主色==null)打印(“主色null”);
返回useWhiteForeground(主色);
}
我在其他语言中找到了,但我不知道如何在dart中实现相同的方法

补充说明:
我的实际代码包含一些额外的复杂情况。我正在使用滑动应用条,这里我想确定flexibleSpace扩展时的标题和图标颜色。我在社区的帮助下改变了它们的颜色。

我使用下面的方法找出要使用的颜色(黑色或白色)


color类已经有了一个计算亮度的方法,称为computeLuminance()


您应该像这样创建调色板生成器

PaletteGenerator paletteGenerator =
  await PaletteGenerator.fromImageProvider(
NetworkImage(imageUrl),

filters: [],
// 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),
); 

请注意过滤器参数中的空列表,其中列出了您可以使用的按钮。这将根据背景自动更改按钮颜色

buttonTheme: ButtonThemeData(
   buttonColor: Colors.teal[500],
   textTheme: ButtonTextTheme.primary
)

如上所述,有时颜色返回null。因此,我不能在其上使用此方法警告:根据computeLuminance(…)文档
此值的计算成本很高。
我的问题主要是获取背景图像的颜色。如果它返回null,我就不能对它使用这个方法
PaletteGenerator paletteGenerator =
  await PaletteGenerator.fromImageProvider(
NetworkImage(imageUrl),

filters: [],
// 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),
); 
buttonTheme: ButtonThemeData(
   buttonColor: Colors.teal[500],
   textTheme: ButtonTextTheme.primary
)