【问题标题】:Stuck in CircularProgressIndicator when Fetching data from json API in flutter在颤振中从 json API 获取数据时卡在 CircularProgressIndicator
【发布时间】:2021-01-26 06:41:52
【问题描述】:

我正在我的物理设备上调试一个应用程序以从 json API 获取数据,但它一直显示 CircularProgressIndicator,如您所见。仍然是初学者,我一直在尝试解决这个问题 3 天。提前致谢,代码如下

here

main.dart 代码

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:json/pages/homePage.dart';

void main() {
  FlutterError.onError = (FlutterErrorDetails details) {
    FlutterError.dumpErrorToConsole(details);
    if (kReleaseMode) exit(1);
  };
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: HomePage(),
    );
  }
}

homePage.dart 文件

import 'package:json/models/bcNewsModel.dart';
import 'package:json/services/api_manager.dart';

class HomePage extends StatefulWidget {
  @override
  MyHomePage createState() => MyHomePage();
// TODO: implement createState

}

class MyHomePage extends State<HomePage> {
  Future<Bitcoin> _bcNews;

  @override
  void initeState() {
    _bcNews = API_Manager().BCNews();
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
        appBar: AppBar(
          title: Text('BitCoin App'),
        ),
        body: Container(
          child: FutureBuilder<Bitcoin>(
            future: _bcNews,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                    itemCount: snapshot.data.articles.length,
                    // ignore: missing_return
                    itemBuilder: (context, index) {
                      var article = snapshot.data.articles[index];
                      Container(
                        height: 100,
                        child: Row(
                          children: <Widget>[
                            Image.network(article.urlToImage),
                          ],
                        ),
                      );
                    });
              } else
                return Center(child: CircularProgressIndicator());
            },
          ),
        ));
  }
}

api_manager.dart 文件


Bitcoin bitcoinFromJson(String str) => Bitcoin.fromJson(json.decode(str));

String bitcoinToJson(Bitcoin data) => json.encode(data.toJson());

class Bitcoin {
Bitcoin({
 this.status,
 this.totalResults,
 this.articles,
});

String status;
int totalResults;
List<Article> articles;

factory Bitcoin.fromJson(Map<String, dynamic> json) => Bitcoin(
     status: json["status"],
     totalResults: json["totalResults"],
     articles: List<Article>.from(
         json["articles"].map((x) => Article.fromJson(x))),
   );

Map<String, dynamic> toJson() => {
     "status": status,
     "totalResults": totalResults,
     "articles": List<dynamic>.from(articles.map((x) => x.toJson())),
   };
}

class Article {
Article({
 this.source,
 this.author,
 this.title,
 this.description,
 this.url,
 this.urlToImage,
 this.publishedAt,
 this.content,
});

Source source;
String author;
String title;
String description;
String url;
String urlToImage;
DateTime publishedAt;
String content;

factory Article.fromJson(Map<String, dynamic> json) => Article(
     source: Source.fromJson(json["source"]),
     author: json["author"],
     title: json["title"],
     description: json["description"],
     url: json["url"],
     urlToImage: json["urlToImage"],
     publishedAt: DateTime.parse(json["publishedAt"]),
     content: json["content"],
   );

Map<String, dynamic> toJson() => {
     "source": source.toJson(),
     "author": author,
     "title": title,
     "description": description,
     "url": url,
     "urlToImage": urlToImage,
     "publishedAt": publishedAt.toIso8601String(),
     "content": content,
   };
}

class Source {
Source({
 this.id,
 this.name,
});

String id;
String name;

factory Source.fromJson(Map<String, dynamic> json) => Source(
     id: json["id"],
     name: json["name"],
   );

Map<String, dynamic> toJson() => {
     "id": id,
     "name": name,
   };
}

问题可能出在我的物理设备上吗?

【问题讨论】:

    标签: json api rest flutter dart


    【解决方案1】:

    由于您尝试请求此信息,如果您已启用对互联网的访问,请检查您的清单。否则,它将继续阻止请求。

    【讨论】:

    • 实际上我在两个 android 清单文件(调试和发布)中都添加了所需的权限,但仍然是同样的问题。 @Jazil Zaim
    猜你喜欢
    • 2021-03-26
    • 2019-01-10
    • 2020-03-19
    • 1970-01-01
    • 2021-08-11
    • 2021-04-30
    • 2019-04-20
    • 2020-11-17
    • 2021-03-21
    相关资源
    最近更新 更多