颤动: 如何制作随机颜色生成器背景

生成随机颜色

return new RaisedButton(




padding:  EdgeInsets.symmetric(vertical: 30.0),
color: Colors.primaries random  List <blue,green>,
75633 次浏览

您可以使用 Random类来实现这一点:

但是,如果你想改变按钮时按下的颜色,你必须使用 StatefulWidget。一个简单的例子如下:

import 'package:flutter/material.dart';
import 'dart:math';


void main() {
runApp(
MaterialApp(
home: MyApp(),
),
);
}


class MyApp extends StatefulWidget {
_MyAppState createState() => _MyAppState();
}


class _MyAppState extends State<MyApp> {


List colors = [Colors.red, Colors.green, Colors.yellow];
Random random = new Random();


int index = 0;


void changeIndex() {
setState(() => index = random.nextInt(3));
}


@override
Widget build(BuildContext context) {
return Center(
child: RaisedButton(
onPressed: () => changeIndex(),
child: Text('Click'),
color: colors[index],
),
);
}
}

此外,还有一个由 Pawankumar命名的 随机 _ pk软件包,它会在每次调用应用程序的构建方法时为我们提供随机颜色。

这将在每次调用应用程序的构建方法时为按钮生成不同的颜色

    import 'package:flutter/material.dart';
import 'dart:math';


void main() => runApp(new MyApp());


class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return new MaterialApp(
title: "Raised Button",
theme: new ThemeData(
primarySwatch: Colors.teal,
),
home: new HomePage());
}
}


class HomePage extends StatefulWidget {
@override
HomePageState createState() => new HomePageState();
}


class HomePageState extends State<HomePage> {
//contains the colours for the circle Avatars
final List<Color> circleColors = [Colors.red, Colors.blue, Colors.green];


Color randomGenerator() {
return circleColors[new Random().nextInt(2)];
}


@override
Widget build(BuildContext context) {
return Center(
child: RaisedButton(
onPressed: () => {},
child: Text('Click'),
color: randomGenerator(),
),
);
}
}

这是我得到随机颜色的方法:

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

注:
这种进口是必需的。

import 'dart:math' as math;

另一种获得大量颜色的方法是使用 Random类和 Color.fromARGBColor.fromRGBO:

import 'dart:math';
import 'package:flutter/material.dart';


void main() {
runApp(MaterialApp(home: MyPage()));
}


class MyPage extends StatefulWidget {
@override
_MyPageState createState() => new _MyPageState();
}


class _MyPageState extends State<MyPage> {
final Random _random = Random();


Color _color = Color(0xFFFFFFFF);


void changeColor() {
setState(() {
_color = Color.fromARGB(
//or with fromRGBO with fourth arg as _random.nextDouble(),
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
);
});
}


@override
Widget build(BuildContext context) {
return Scaffold(
body: InkWell(
onTap: changeColor,
child: Container(
color: _color,
),
),
);
}
}

如果你使用 Color.fromRGBO:

第四个参数应该在 0.01.0之间,幸运的是我们有 _random.nextDouble(),它给出了 0.01.0之间的随机值。

顺便说一句:

  • 红色
  • 蓝色
  • 绿色
  • O -不透明度
  • A -Alpha

最简单和最好的建议方法是:

步骤1: 在 pubspec.yaml 中添加依赖项 Random _ color: ^ 1.0.3

步骤2: 添加导入 导入’包: 随机 _ 颜色/随机 _ 颜色. 省道’;

步骤3: 在“ color”属性中写入 颜色: 随机颜色()

颜色类中有一个内置的材质颜色列表。你可以像下面这样使用它

var generatedColor = Random().nextInt(Colors.primaries.length)
Colors.primaries[generatedColor]

例子

import 'dart:math';


Icon(
Icons.account_circle,
size: 40,
color: Colors.primaries[Random().nextInt(Colors.primaries.length)],
)

以上是使用随机颜色给列表着色的最简单、最快捷的方法。你不需要维护一个颜色列表。

import 'dart:math';
import 'dart:ui';


class Util {
static Color randomColor() {
return Color(Random().nextInt(0xffffffff));
}
}

对于不透明的颜色:

static Color randomOpaqueColor() {
return Color(Random().nextInt(0xffffffff)).withAlpha(0xff);
}

为了得到随机的颜色,我做了下面的步骤:

import 'dart:math' as math;


final rnd = math.Random();


Color getRandomColor() => Color(rnd.nextInt(0xffffffff));

我们可以使用随机类,但有一个 随机色彩插件在颤动,可以帮助我们生成随机颜色,也可以选择高饱和度颜色与这个代码:

import 'package:random_color/random_color.dart';


RandomColor _randomColor = RandomColor();


Color _color = _randomColor.randomColor(
colorSaturation: ColorSaturation.highSaturation
);

浅色代码如下:

import 'package:random_color/random_color.dart';


RandomColor _randomColor = RandomColor();


Color _color = _randomColor.randomColor(
colorBrightness: ColorBrightness.light
);

有关更多选项,请阅读此 https://pub.dev/packages/random_color#-readme-tab-

我认为我们需要一个单独的类(您可以使用静态或顶级函数)。

只是不要忘记下一个 Int : “生成一个非负随机整数,均匀分布在0(包括0)到最大(排他)的范围内。”。 因此,将“ max”设置为0x10000000(0xFFFFFFFF + 1) !

import 'dart:math';


import 'package:flutter/cupertino.dart';


class RandomColor {
static const _MAX_VALUE = 0x100000000;
final _random = Random();


Color nextColor() => Color(_random.nextInt(_MAX_VALUE));
}

通过下面这种方式,您可以使用一行命令获得随机颜色,而不需要任何导入:

 ([...Colors.primaries]..shuffle()).first

这也是省道中级联符号和展开运算符的一个很好的例子。你可以找到更多关于它的信息。

如果你想要区分颜色,这个方法可以给出4096种不同的颜色,至少有16个等级的差别:

var rnd = Random();
var r = rnd.nextInt(16) * 16;
var g = rnd.nextInt(16) * 16;
var b = rnd.nextInt(16) * 16;
Color color = Color.fromARGB(255, r, g, b);

Rounded Border with Random Color and Background

尝试使用类似 Gmail 效果的 包裹。 它会产生随机的颜色背景。 还支持选择小部件

RoundedImageWithTextAndBG(
radius: 20,
isSelected: isSelected,
uniqueId: textModel[widget.index]['uniqueId'],
image: (widget.index % 3 == 0)
? 'https://picsum.photos/id/${widget.index}/800/800'
: '',
text: textModel[widget.index]['name'],
),

如果我们想从 Colors.basic 类中随机选择颜色:

1-进口:

import 'dart:math' as math show Random;

2-设置值:

final color = Colors.primaries[math.Random().nextInt(Colors.primaries.length)];

3-使用价值:

backgroundColor: color,