Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振单击即可更改背景_Flutter_Dart - Fatal编程技术网

Flutter 颤振单击即可更改背景

Flutter 颤振单击即可更改背景,flutter,dart,Flutter,Dart,我需要通过点击屏幕将背景颜色更改为随机,我不知道怎么做 import 'package:flutter/widgets.dart'; import 'dart:math'; main() => runApp( Directionality( textDirection: TextDirection.ltr, child: Container( color: Color((Random().nextDouble() * 0xFFFFFF).toInt()).

我需要通过点击屏幕将背景颜色更改为随机,我不知道怎么做

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

main() => runApp(
  Directionality(
    textDirection: TextDirection.ltr,
    child: Container(
      color: Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0),
      child: MyApp(),
    ),
  ),
);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: GestureDetector( // используется как обычный виджет
        onTap: () { // одно из свойств GestureDetector
          // Этот метод будет вызван, когда дочерний элемент будет нажат
          print('You pressed me');
        },
      ),
    );
  }
}
试试这个

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  Color color;

  @override
  void initState() {
    color = Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        setState(() {
          color = Color((Random().nextDouble() * 0xFFFFFF).toInt())
              .withOpacity(1.0);
        });
      },
      child: Scaffold(
        backgroundColor: color,
      ),
    );
  }
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
home:home(),
);
}
}
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
颜色;
@凌驾
void initState(){
颜色=颜色((随机().nextDouble()*0xFFFFFF.toInt())。不透明度为1.0;
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回手势检测器(
onTap:(){
设置状态(){
颜色=颜色((随机().nextDouble()*0xFFFFFF.toInt())
.不透明度(1.0);
});
},
孩子:脚手架(
背景颜色:颜色,
),
);
}
}

1.您需要制作一个
状态小部件,因为您想在点击时更改背景

2.您需要列出可以设置为背景色的颜色列表

3。您需要添加一个变量,该变量保存颜色列表中当前背景颜色的索引

4。点击设置新背景色时,需要更改此变量

注意:如果您想要随机颜色,可以查看易于使用的包装

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(title: "Title"),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  MyHomePageState createState() => MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  List<Color> _colors = [Colors.blue, Colors.red, Colors.green, Colors.yellow];
  var _index = 0;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: _colors[_index % _colors.length],
      body: GestureDetector(
        onTap: () {
          setState(() {
            _index++;
          });
        },
        child: Stack(
          children: <Widget>[
            Container(
              width: MediaQuery.of(context).size.width,
              height: MediaQuery.of(context).size.height,
              color: Colors.transparent,
            ),
          ],
        )
      )
    );
}
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:我的主页(标题:“标题”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
MyHomePageState createState()=>MyHomePageState();
}
类MyHomePageState扩展了状态{
列表颜色=[colors.blue,colors.red,colors.green,colors.yellow];
var_指数=0;
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:_colors[_index%_colors.length],
正文:手势检测器(
onTap:(){
设置状态(){
_索引++;
});
},
子:堆栈(
儿童:[
容器(
宽度:MediaQuery.of(context).size.width,
高度:MediaQuery.of(context).size.height,
颜色:颜色。透明,
),
],
)
)
);
}

要执行此操作,您需要将颜色存储为所需小部件状态的一部分。然后,当您检测到按下按钮时,您可以更改颜色并调用以触发重建以显示新颜色。这涉及修改代码以使用新颜色,正如我在下面所做的

下面的代码使用与原始代码完全相同的小部件,只需进行修改即可使必要的部分具有状态

import'package:flatter/widgets.dart';
导入“dart:math”;
main()=>runApp(
方向性(
textDirection:textDirection.ltr,
子项:MyApp(),
),
);
类MyApp扩展了StatefulWidget{//更改为`StatefulWidget`
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
//将颜色存储为“状态”的一部分`
颜色=颜色((随机().nextDouble()*0xFFFFFF.toInt())。不透明度为1.0;
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:颜色,
子:容器(
儿童:手势检测器(
onTap:(){
打印(“你逼我”);
//`setState`重建小部件以显示新颜色
//这里不可能使用“无状态小部件”
设置状态(){
颜色=颜色((随机().nextDouble()*0xFFFFFF.toInt())。不透明度为1.0;
});
},
),
),
);
}
}

这里不需要
颜色列表
。OP问题说明生成随机颜色。我不知道他/她是指随机选择颜色还是生成随机颜色,甚至是在屏幕上随机点击。@DerekI假设他/她指的是每次检测到点击时生成随机背景色。