我有一个按钮和一些动画。当我点击按钮(我按住它)时,我想要看到按下的动画。当我停止按下按钮时,它又变成了一个红色的盒子。当我按住它的当前状态时,它没有变化。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Color color = Colors.red;
double w = 100.0;
double h = 100.0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GestureDetector(
child: Container(
width: w,
height: h,
color: color,
),
onTap: () {
setState(() {
color = Colors.blue;
h = 75.0;
w = 125.0;
});
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
color = Colors.red;
h = 100.0;
w = 100.0;
print("pressed");
});
});
},
),
),
);
}
}发布于 2020-12-25 18:42:39
您可以使用AnimatedContainer,然后使用Duration属性为其提供动画效果。之后,您可以用onLongPress替换onTap,神奇的事情就发生了:)
下面是我编辑的代码:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Color color = Colors.red;
double w = 100.0;
double h = 100.0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GestureDetector(
child: AnimatedContainer(
duration: Duration(milliseconds: 300),
width: w,
height: h,
color: color,
),
onLongPress: () {
setState(() {
color = Colors.blue;
h = 75.0;
w = 125.0;
});
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
color = Colors.red;
h = 100.0;
w = 100.0;
print("pressed");
});
});
},
),
),
);
}
}发布于 2020-12-25 21:13:18
尝试用InkWell或InkResponse包装你的Container。然后您可以设置hoverColor、highlightColor等。
https://stackoverflow.com/questions/65447257
复制相似问题