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假设他/她指的是每次检测到点击时生成随机背景色。