如何在使用 FutureBuilder 显示加载指示器时仅获取一次数据?
问题是每次用户打开屏幕时,即使我在 initState() 中设置了未来,它也会重新获取数据。
我只想在用户第一次打开屏幕时获取数据,然后我将使用保存的获取数据。
我应该只使用带有加载变量的有状态小部件并将其设置在 setState() 中吗?
我正在使用提供程序包
Future<void> fetchData() async {
try {
final response =
await http.get(url, headers: {'Authorization': 'Bearer $_token'});......
和我的屏幕小部件:
class _MyScreenState extends State<MyScreen> {
Future<void> fetchData;
@override
void initState() {
fetchData =
Provider.of<Data>(context, listen: false).fetchData();
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: fetchData,
builder: (ctx, snapshot) =>
snapshot.connectionState == ConnectionState.done
? Consumer<Data>(
builder: (context, data, child) => Text(data.fetchedData)): Center(
child: CircularProgressIndicator(),
),
);
}
}