gpt4 book ai didi

Flutter:如何在使用 FutureBuilder 时仅从 api 获取一次数据?

转载 作者:行者123 更新时间:2023-12-04 16:39:40 25 4
gpt4 key购买 nike

如何在使用 FutureBuilder 仅获取一次数据以在获取时显示加载指示器?

问题是每次用户打开屏幕时它都会重新获取数据,即使我在 initState() 中设置了 future 。

我只想在用户第一次打开屏幕时获取数据,然后我将使用保存的获取数据。

我应该只使用带有加载变量的有状态小部件并将其设置在 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(),
),

);
}
}

最佳答案

如果即使小部件重建,您也只想获取一次数据,则必须为此创建一个模型。以下是制作方法:

class MyModel{
String value;
Future<String> fetchData() async {
if(value==null){
try {
final response =
await http.get(url, headers: {'Authorization': 'Bearer $_token'});......
value=(YourReturnedString)
}
}
return value;
}
}

不要忘记将 MyModel 作为提供者。在你的 FutureBuilder 中:

@override
Widget build(context) {
final myModel=Provider.of<MyModel>(context)
return FutureBuilder<String>(
future: myModel.fetchData(),
builder: (context, snapshot) {
// ...
}
);
}

关于Flutter:如何在使用 FutureBuilder 时仅从 api 获取一次数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63478976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com