flutter 如何随机改变rgb颜色?

wwtsj6pe  于 2023-05-01  发布在  Flutter
关注(0)|答案(4)|浏览(177)

在应用程序中,当你点击屏幕时,你需要将颜色更改为随机,但必须是RGB格式。如何获得随机RGB颜色?

class _HomePageState extends State<HomePage> {
  Color _color = Colors.white;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Color picker"),
        centerTitle: true,
      ),
      body: GestureDetector(
        onTap: () {
          setState(() {
            _color = ...
          });
        },
        child: Container(
          color: _color,
          padding: const EdgeInsets.all(20),
        ),
      ),
    );
  }
}
mfpqipee

mfpqipee1#

你可以这样做

class _HomePageState extends State<HomePage> {
    
       Random random = Random();
  Color _color = Colors.white;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Color picker"),
        centerTitle: true,
      ),
      body: GestureDetector(
        onTap: () {
          setState(() {
            _color = Color.fromRGBO(
              random.nextInt(255),
              random.nextInt(255),
              random.nextInt(255),
              1,
            );
          });
        },
        child: Container(
          color: _color,
          padding: const EdgeInsets.all(20),
        ),
      ),
    );
  }
}
umuewwlo

umuewwlo2#

最好的方法是得到一个随机的颜色:

Color((math.Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0)

需要此导入。

import 'dart:math' as math;

Colors.primaries[Random().nextInt(Colors.primaries.length)]
c2e8gylq

c2e8gylq3#

其他解决方案(到目前为止)实际上是创建一个任意的RGB值,但我怀疑OP想要一个“不同但可行的颜色”。随机RGB是生成这些的糟糕方法。您希望HSV方向的随机性。
在这种情况下,向HSVColor.fromAHSV提供随机值。Alpha应该是1。0(不透明)。色调可以是0之间的任意值。0到360.0。饱和度应该在0之间。5和1.0(颜色比灰色多)。该值应介于0之间。0和0.5,如果你有对比度轻文本,和0。5到1.0,如果你有对比的深色文本。

irtuqstp

irtuqstp4#

这与@Jasmin的答案类似。但我觉得这会有帮助。

import 'dart:math';

Color getRandomColor() {
  Random random = Random();
  int red = random.nextInt(256);
  int green = random.nextInt(256);
  int blue = random.nextInt(256);
  return Color.fromRGBO(red, green, blue, 1.0);
}

但是如果你是在生产,我建议你做一个颜色列表,并从列表中得到随机的颜色。因此,生成的颜色与我们的屏幕不兼容。

相关问题