【发布时间】:2021-07-04 19:57:43
【问题描述】:
重建小部件时如何取消FutureBuilder操作
假设我有这样的代码...每次我按下浮动按钮时,小部件都会重建调用 myFuture 等待五秒钟然后计数器增加...现在我想要在那五秒钟内,如果我按下浮动按钮,当前的 Future(仍然延迟)应该 停止其操作 并且新的 Future 将被调用...所以最后我应该得到一个 2 的计数器,但我得到了3...
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var counter = 0;
myFuture()async{
await Future.delayed(Duration(seconds:5));
counter++;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: FutureBuilder(
future: myFuture(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(child: CircularProgressIndicator());
else return Text(counter.toString());
}
),
floatingActionButton: FloatingActionButton(
onPressed: ()=>setState(() {}),
child: Icon(Icons.add),
),
);
}
}
【问题讨论】: