簡體   English   中英

將 min SDK 從 2.7.0 更改為 2.12.0 時無法從 API 加載數據。 我究竟做錯了什么? (撲)

[英]Unable to load data from API when changing min SDK to 2.12.0 from 2.7.0. what am I doing wrong? (Flutter)

我正在使用顫振制作一個練習移動應用程序,我通過調用第三方 API 來加載數據。 我想使用 late 關鍵字來集成我需要將 min SDK 版本從 2.7.0 更改為 2.12.0 的功能。 但在這樣做之后,我無法從 API 加載數據。 我正在使用未來的構建器,並且在更改之前和之后共享它的代碼。

在將 min sdk 更改為 2.12.0 之前:

    Widget build(BuildContext context) {
    final ApiService client = ApiService(pageIndex);
    return FutureBuilder(
      future: client.getArticle(),
      builder: (BuildContext context, AsyncSnapshot<List<Article>> snapshot) {
        List article = snapshot.data;
        if (snapshot.hasData) {
          return ListView.separated(
              separatorBuilder: (context, index) {
                return SizedBox(
                  height: 10,
                );
              },
              padding: EdgeInsets.all(15),
              itemCount: article.length,
              itemBuilder: (context, i) {
                return NewsScreenWidget(
                  author: article[i].author,
                  title: article[i].title.toString(),
                  description: article[i].description.toString(),
                  url: article[i].url.toString(),
                  urlToImage: article[i].urlToImage,
                  publishedAt: DateTime.parse(article[i].publishedAt),
                  content: article[i].content.toString(),
                );
              });
        }
        return Center(
          child: CircularProgressIndicator(
            color: Colors.black,
            strokeWidth: 5,
          ),
        );
      },
    );
  }

將 min SDK 更改為 2.12.0 后

Widget build(BuildContext context) {
    final ApiService client = ApiService(widget.pageIndex);
    return FutureBuilder(
      future: client.getArticle(),
      builder: (BuildContext context, AsyncSnapshot<List<Article>> snapshot) {
        var article = snapshot.data;
        if (article == null) {
          return const Center(
            child: CircularProgressIndicator(),
          );
        } else {
          var datalength = article.length;
          if (datalength == 0) {
            return const Center(
              child: Text('No data found'),
            );
          } else {
            return ListView.separated(
              separatorBuilder: (context, index) {
                return SizedBox(
                  height: 10,
                );
              },
              padding: EdgeInsets.all(15),
              itemCount: datalength,
              itemBuilder: (context, i) {
                return NewsScreenWidget(
                  author: article[i].author,
                  title: article[i].title.toString(),
                  description: article[i].description.toString(),
                  url: article[i].url.toString(),
                  urlToImage: article[i].urlToImage,
                  publishedAt: DateTime.parse(article[i].publishedAt),
                  content: article[i].content.toString(),
                );
              },
            );
          }
        }
      },
    );
  }

目前,我只是看到 CircularProgressIndicator 使用上面的代碼,但是當我切換回 min SDK 為 2.7.0 的分支時,一切正常(但不能使用 late 關鍵字)。

任何幫助都會很棒:)謝謝。

這些是構建未來構建器時的最佳實踐:

FutureBuilder<YOUR CLASS>(
future: future,
builder: (context, snapshot) {
  if (snapshot.hasData) {
    // do something with logic
    return WIDGET;
  }
  
  if(snapshot.hasError) {
   return Text(snapshot.error);
  }

  return const Center(child: CircularProgressIndicator());

},
),

更多信息: https ://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM