API 在 Flutter 的屏幕上返回 null

Posted

技术标签:

【中文标题】API 在 Flutter 的屏幕上返回 null【英文标题】:API Returning null on the Screen in Flutter 【发布时间】: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 我已经这样做了.... 【参考方案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 ***.com/questions/64197752/… 酷。请更新任何有帮助的评论/答案。

以上是关于API 在 Flutter 的屏幕上返回 null的主要内容,如果未能解决你的问题,请参考以下文章

flutter_graphql 不起作用,并且在应用程序构建后总是返回 null

Flutter NoSuchMethodError:在 null 上调用了方法“[]”。使用flutter获取api时如何解决此错误

从 Laravel API 服务器接收的数据未显示在 Flutter 屏幕上

使用所有类型的返回数据返回 null 值 Flutter

Flutter firebase 登录用户在登录后返回 NULL currentUser

Flutter:在 null 上调用了方法“[]”