要避免在按下按钮时对setState进行小部件锁定,可以使用一个布尔变量来控制按钮是否可点击,并在setState期间将其设置为false。
以下是一个示例代码:
import 'package:flutter/material.dart';
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State {
bool _isButtonEnabled = true;
void _handleButtonPress() {
if (!_isButtonEnabled) {
return;
}
setState(() {
_isButtonEnabled = false;
});
// 模拟耗时操作
Future.delayed(Duration(seconds: 2), () {
setState(() {
_isButtonEnabled = true;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Button Example'),
),
body: Center(
child: RaisedButton(
onPressed: _isButtonEnabled ? _handleButtonPress : null,
child: Text('Press Me'),
),
),
);
}
}
void main() {
runApp(MaterialApp(
home: MyWidget(),
));
}
在上面的示例中,我们使用_isButtonEnabled
布尔变量来控制按钮是否可点击。当按钮被按下时,我们首先检查_isButtonEnabled
的值。如果它为false,则返回,不执行任何操作。如果它为true,我们将其设置为false,并在setState期间更新小部件状态。
在这个例子中,我们使用Future.delayed
来模拟一个耗时的操作。在耗时操作完成后,我们再次调用setState将_isButtonEnabled
设置为true,使按钮再次可点击。