api - 如何解决在 Flutter 中编译移动应用程序时遇到的错误?
问题描述
这是我编译时遇到的错误
IA Emulator 上的 AOSP 上的 Observatory 调试器和分析器可在以下位置获得:http: //127.0.0.1 :55598/YYOpp337z7w=/E/flutter (19984): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)]未处理的异常:NoSuchMethodError:在 null 上调用了方法“toDouble”。E/flutter(19984):接收者:null E/flutter(19984):尝试调用:toDouble()
这是我向 REST API 发出请求的类
class HttpHandler{
final String _baseUrl = "api.themoviedb.org";
final String _lenguaje = "es-ES";
Future<dynamic> getJson(Uri uri) async{
//Primera peticion api
http.Response response = await http.get(uri); //amacena la respuesta
return json.decode(response.body);
}
Future<List<Media>> fetchMovies(){
//define la la url
var uri = new Uri.https(_baseUrl, "3/movie/popular",{
'api_key' : API_KEY,
'page': "1",
'language ': _lenguaje
});
return getJson(uri).then(((data) =>
data['results'].map<Media>((item)=>new Media(item)).toList()
));
}
我的构造方法基于 API 请求发送给我的对象的设计
class Media {
int id;
double voteAverage;
String title;
String posterPath;
String backdropPath;
String overview;
String releaseDate;
List<dynamic> genreIds;
String getPosterUrl() => getMediumPictureUrl(posterPath);
//Definir el constructor
//Basado de diseño de factory en la base de disñeo de objetos
factory Media(Map jsonMap){
try {
return new Media.deserialize(jsonMap);
} catch (ex) {
throw ex;
}
}
Media.deserialize(Map json) :
id = json["id"].toInt(),
voteAverage = json["voteAverage"].toDouble(),
title = json["title"],
posterPath = json["posterPath"]?? "",
backdropPath = json["backdropPath"]?? "",
overview = json["overview"],
releaseDate = json["releaseDate"],
genreIds = json["genreIds"].toList;
}
这是在这种情况下调用请求以显示电影列表的颤动视图
class MediaList extends StatefulWidget {
@override
_MediaListState createState() => new _MediaListState();
}
class _MediaListState extends State<MediaList> {
List<Media> _media = new List();
@override
void initState(){
super.initState();
loadMovies();
}
void loadMovies()async{
var movies = await HttpHandler().fetchMovies();
setState(() {
_media.addAll(movies);
});
}
@override
Widget build(BuildContext context) {
return new Container(
child: new ListView.builder(
itemCount: _media.length,
itemBuilder: (BuildContext context ,int index){
return new Column(
children: <Widget>[
new Image.network(_media[index].getPosterUrl())
],
);
},
),
);
}
}
解决方案
在您的上添加一个空检查voteAverage = json["voteAverage"].toDouble(),
更新后的代码看起来像voteAverage = json["voteAverage"]?.toDouble(),
希望这能解决您的问题!
推荐阅读
- php - 将新图像文件名从控制器移动到模型
- floating-point - 相等的加法属性对浮点数有效吗?
- javascript - Activity Gauze Highchart DataLabel
- r - Pheatmap:更改与 colData() 相关的注释
- javascript - 有没有办法使用 SQL PHP JS 以动态形式加载动态数据?
- c# - 在 datetime 中输入 null(C# 和 WPF)
- c# - InvalidOperationException:无法跟踪实体类型“Vessels”>的实例,因为另一个实例
- google-sheets - Data Studio 中一个单元格中的多个 URL 显示为一个组合 URL
- javascript - 使用 Chart.js 制作木偶
- forms - Symfony5 forms - render radio input inside label