繁体   English   中英

数据仅在热重载时获取 flutter

[英]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后的initStatedidChangeDependencies方法中等待其响应,然后调用setState

getResponse().then((resp) =>
  setState(() {
    resp = resp;
  }));

此代码调用getResponse方法并等待返回响应。 收到后,它会调用setState方法并使用返回的数据更新小部件的 state。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM