Flutter——限制按钮点击的时间间隔
解决连续点击造成的卡顿问题
核心代码:
var lastPopTime = DateTime.now(); void intervalClick(int needTime){ // 防重复提交 if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: needTime)){ print(lastPopTime); lastPopTime = DateTime.now(); print("允许点击"); }else{ // lastPopTime = DateTime.now(); //如果不注释这行,则强制用户一定要间隔2s后才能成功点击. 而不是以上一次点击成功的时间开始计算. print("请勿重复点击!"); } }
调用:
floatingActionButton: FloatingActionButton(
onPressed:(){
intervalClick(2);
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
完整代码:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; var lastPopTime = DateTime.now(); void intervalClick(int needTime){ // 防重复提交 if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: needTime)){ print(lastPopTime); lastPopTime = DateTime.now(); print("允许点击"); }else{ // lastPopTime = DateTime.now(); //如果不注释这行,则强制用户一定要间隔2s后才能成功点击. 而不是以上一次点击成功的时间开始计算. print("请勿重复点击!"); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed:(){ intervalClick(2); }, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }
推荐参考文章:https://www.jianshu.com/p/2da12a1038de