flutter:等待按钮卡的飞溅效果点击
flutter: wait for the splash-effect tap of a button card
我有一个小部件按钮,当点击时,启动画面不会正确显示,因为它直接进入路线并且速度非常快,是否可以给点击动画一个时间然后按照路线走?
Card(
margin: EdgeInsets.only(top: 20, left: 20, right: 20),
child: InkWell(onTap: () => Navigator.of(context).pushNamed('/textvoice'),
child: Text('hello')))
onTap: () async {
await Future.delayed(Duration(milliseconds: 600));
Navigator.of(context).pushNamed('/textvoice');
}
首先,为检查动画创建一个布尔变量。
bool isLoading = false;
然后你可以试试这个:
Card(
margin: EdgeInsets.only(top: 20, left: 20, right: 20),
child: InkWell(
onTap: () async {
setState(() => isLoading = true);
await Future.delayed(Duration(seconds: 2));
setState(() => isLoading = fasle);
Navigator.of(context).pushNamed('/textvoice');
},
child: Center(
child: isLoading ? CircularProgressIndicator() : Text('hello'),
),
),
);
如果你不确定是否理解这个,我会给你完整的Stateful Widget
import 'package:flutter/material.dart';
class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
bool isLoading = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: buildButton(context),
),
);
}
Card buildButton(BuildContext context) {
return Card(
margin: EdgeInsets.only(top: 20, left: 20, right: 20),
child: InkWell(
onTap: () async {
setState(() => isLoading = true);
await Future.delayed(Duration(seconds: 2));
setState(() => isLoading = true);
Navigator.of(context).pushNamed('/textvoice');
},
child: Center(
child: isLoading ? CircularProgressIndicator() : Text('hello'),
),
),
);
}
}
我有一个小部件按钮,当点击时,启动画面不会正确显示,因为它直接进入路线并且速度非常快,是否可以给点击动画一个时间然后按照路线走?
Card(
margin: EdgeInsets.only(top: 20, left: 20, right: 20),
child: InkWell(onTap: () => Navigator.of(context).pushNamed('/textvoice'),
child: Text('hello')))
onTap: () async {
await Future.delayed(Duration(milliseconds: 600));
Navigator.of(context).pushNamed('/textvoice');
}
首先,为检查动画创建一个布尔变量。
bool isLoading = false;
然后你可以试试这个:
Card(
margin: EdgeInsets.only(top: 20, left: 20, right: 20),
child: InkWell(
onTap: () async {
setState(() => isLoading = true);
await Future.delayed(Duration(seconds: 2));
setState(() => isLoading = fasle);
Navigator.of(context).pushNamed('/textvoice');
},
child: Center(
child: isLoading ? CircularProgressIndicator() : Text('hello'),
),
),
);
如果你不确定是否理解这个,我会给你完整的Stateful Widget
import 'package:flutter/material.dart';
class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
bool isLoading = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: buildButton(context),
),
);
}
Card buildButton(BuildContext context) {
return Card(
margin: EdgeInsets.only(top: 20, left: 20, right: 20),
child: InkWell(
onTap: () async {
setState(() => isLoading = true);
await Future.delayed(Duration(seconds: 2));
setState(() => isLoading = true);
Navigator.of(context).pushNamed('/textvoice');
},
child: Center(
child: isLoading ? CircularProgressIndicator() : Text('hello'),
),
),
);
}
}