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

时间:2018-07-14 14:56:06

标签: dart flutter

  

生成随机颜色

return new RaisedButton(


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

13 个答案:

答案 0 :(得分:13)

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

#include <iostream>

class singltn {
    private:
        static singltn *instance;
        int data;

        // Private constructor so that no objects can be created.
        singltn() {
            data = 0;
        }
        int _AA;
        int _BB;
        int _CC;
   public:
        static singltn *getInstance() {
            if (!instance)
                instance = new singltn;            

            return instance;
        }
        void setup(int AA, int BB, int CC) {
            _AA = AA;
            _BB = BB;
            _CC = CC;
        }

   int getData() {
      return this->data;
   }

   void setData(int data) {
      this -> data = data;
   }
   int getAA(){
       return this->_AA;
   }

};

//Initialize pointer to zero so that it can be initialized in first call to getInstance
singltn *singltn::instance = 0;

int main(){
    singltn *a = a->getInstance();
    a->setup(111,222,333);
    std::cout << "dat " << a->getData() << " _AA " << a-> getAA() << std::endl;
    a->setData(100);
    std::cout << "dat " << a->getData() << " _AA " << a-> getAA() << std::endl;  
    singltn *b = b->getInstance(); 
    std::cout << "dat " << b->getData() << " _AA " << a-> getAA() << std::endl;
   return 0;
}

答案 1 :(得分:11)

您可以使用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],
      ),
    );
  }
}

此外,还有一个random_pk开发的名为pawankumar的软件包,每次调用您应用的构建方法时,该软件包都会为我们提供随机颜色。

答案 2 :(得分:3)

每次调用应用的构建方法时,都会为按钮生成不同的颜色

    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(),
          ),
        );
      }
  }

答案 3 :(得分:3)

获取大量颜色的另一种方法是将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之间的值。

顺便说一句:

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

答案 4 :(得分:2)

我们可以为此使用随机类,但是在flutter中有一个 random_color插件,可以帮助我们生成随机颜色,还可以使用以下代码选择高饱和度颜色:

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-

答案 5 :(得分:0)

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

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

步骤2:添加导入       导入'package:random_color / random_color.dart';

第3步:在“颜色”属性中编写       颜色:RandomColor()。randomColor();

答案 6 :(得分:0)

我创建了一个flutter应用程序颜色选择器,使您可以在选择颜色时对其进行可视化。如果您希望Flutter Doctor Color Picker

可以使用它

答案 7 :(得分:0)

颜色类中有一个内置的材料颜色列表。您可以按以下方式使用它

import 'dart:math';

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

以上是使用随机颜色为列表着色的最简单,最快的方法。您无需维护颜色列表。

答案 8 :(得分:0)

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

别忘了nextInt "Generates a non-negative random integer uniformly distributed in the range from 0, inclusive, to max, exclusive."。 因此,将“ max”设置为0x100000000(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));
}

答案 9 :(得分:0)

好吧,如果你想要可区分的颜色,这个方法会给出 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);

答案 10 :(得分:-1)

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

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

答案 11 :(得分:-1)

要获得随机颜色,请执行下一个操作:

import 'dart:math' as math;

final rnd = math.Random();

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

答案 12 :(得分:-1)

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

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

这也是 dart 中级联表示法和扩展运算符的一个很好的例子。 Here 您可以找到有关它的更多信息。