[英]Data only fetchs when hot reload flutter
我知道之前有人问过这个问题,但我无法自己解决。 我有一个获取方法:
dynamic getResponse() async {
response = await api.getGlobalResponse();
resp = GlobalResponse.fromJson(jsonDecode(response));
if (resp != null) {
if (resp!.almacenes != null) {
for (Almacen alm in resp!.almacenes!) {
int count = 0;
for (var opt in options) {
if (opt != alm.name) {
continue;
} else {
count += 1;
break;
}
}
if (count <= 0) options.add(alm.name.toString());
}
}
}
return response;
}
热重载后解决OK。
我在登录后的第一个屏幕的 initState() 上调用它,如下所示:
class _LoggedInState extends State<LoggedIn> {
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
getResponse();
setState(() {
resp = resp;
});
page = getPage();
}
@override
didChangeDependencies() {
getResponse();
setState(() {
resp = resp;
});
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
if (getToken()) {
return SafeArea(
child: Scaffold(
body: page,
),
);
} else {
return getLoginScreen();
}
}
}
热重载后 getPage() 返回正确地从 fetch 加载,但我无法弄清楚如何从第一次自动加载。 我已经尝试过 ValueNotifiers 和 ValueListenables,但没有成功。 你能帮帮这个傻瓜吗?
通常建议避免使用 Dart 中的dynamic
类型,因为如果返回或传入错误类型的数据可能会导致潜在的运行时错误。相反,最好指定您期望的特定类型。
如果您确定必须在此处使用dynamic
,则将getResponse
的返回类型更改为Future<dynamic>
因为 function 是异步的。
在小部件中,在调用getResponse
后的initState
和didChangeDependencies
方法中等待其响应,然后调用setState
。
getResponse().then((resp) =>
setState(() {
resp = resp;
}));
此代码调用getResponse
方法并等待返回响应。 收到后,它会调用setState
方法并使用返回的数据更新小部件的 state。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.