【问题标题】:API Returning null on the Screen in FlutterAPI 在 Flutter 的屏幕上返回 null
【发布时间】:2021-08-24 15:21:23
【问题描述】:

我在我的应用程序中使用了Numbers Api,但是当按下按钮时,它在屏幕上显示为空。我的 API 也只包含字符串。

这是我的 API 代码:

String fact;
  Future fetchData() async {
    Response response;
    response = await get(Uri.https('numbersapi.com', 'random/trivia'));
    if (response.statusCode == 200) {
      print(response.statusCode);
      setState(() {
        fact = response.body;
      });
    }
  }

  @override
  void initState() {
    fetchData();
    super.initState();
  }

  @override
  Widget build(BuildContext context) { 
   .....

由于 Text 小部件不接受空值,我将其转换为 toString() -

              fact.toString(),
              style: TextStyle(
                fontSize: 20.0,
                color: Colors.white,
              ),
            ),

但是当fetchData()传入提升按钮的onPressed属性时,在屏幕上显示为null。

如何在屏幕上显示事实而不是 null?

任何帮助将不胜感激:)

【问题讨论】:

  • 可以把按钮代码也放上来吗?
  • @Pushpendra 是的,它只是 - child: ElevatedButton( onPressed: () { fetchData(); },
  • 当我 print(fetchData()); 它给了 -Instance of 'Future<dynamic>'
  • 你需要await
  • @Pushpendra 我已经这样做了....

标签: api flutter dart


【解决方案1】:

最初,在获取数据之前,事实将是 null。因此,您可以显示一些指示正在获取数据的指标,如下所示

fact == null ? Show Loading Message : Text(fact);

或者显示一个空字符串,如下所示。

Text(fact ?? "")

按钮

FlatButton(child: Text("Load"), onPressed: () async => await fetchData())

编辑:

得到了确切的问题。您尝试从中获取数据的 URL 不是安全 URL。是http 不是https

因此在获取数据时尝试跟随。

await get(Uri.http('numbersapi.com', 'random/trivia'))

Bad state: Insecure HTTP is not allowed by platform: 检查此 HTTP 连接是否不安全。

【讨论】:

  • 如果 fact 为 null,则表示 API 无法正常工作..
  • @NightyKnight 我已经更新了评论。现在检查它应该可以正常工作。
  • 给出错误 - [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Bad state: Insecure HTTP is not allowed by platform: http://numbersapi.com/random/trivia
  • 酷。请更新任何有帮助的评论/答案。
猜你喜欢
  • 2020-09-22
  • 1970-01-01
  • 2015-06-17
  • 2018-10-06
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多