【发布时间】:2020-07-29 09:50:23
【问题描述】:
我刚刚尝试解析来自 firebase 实时数据库的数据。 但转换为模型时出现问题 我正在尝试从 Flutter 上的 firebase 数据库中解析数据。 但是报错了
我的完整测验:{-M5-R3BqTajbCFk5mQuQ: {coins: 434, isSubmit: true, 问题:[{回答:sddsd,名称:我们为什么使用它?,选项: [成立, adwada, adawda, sddsd], 选择: }, {answer: adawda, 名称:我在哪里可以买到?,选项:[已建立,adwada,adawda, sddsd], select: sddsd}, {answer: adwada, name: Lorem Ipsum 很简单 打印的虚拟文本?,选项:[建立,adwada,adawda, sddsd],选择:建立}],quizId:YItWgbYjHm}, -M50HhYPnuR7tSC-9ajw: {isSubmit: true, questions: [{answer: dadada, name: 它来自哪里?, 选项: [vvvv, dadada, dsdsdssd, bbbbbb], select: dadada}], quizId: 9pdzphz0x8}}
I/flutter (6768): type '(dynamic, dynamic) => Null' 不是 'f' 的类型 '(dynamic) => dynamic' 的子类型
这里是数据库结构
fetchMyQuiz()的以下函数
Future<Quiz> fetchMyQuiz(String uid) async {
Quiz _quiz;
var dio = Dio();
dio.options
..baseUrl = Constant.baseUrl
..connectTimeout = 5000 //5s
..receiveTimeout = 5000
..validateStatus = (int status) {
return status > 0;
}
..headers = {
HttpHeaders.userAgentHeader: 'dio',
'common-header': 'xx',
};
_isLoadingUser = true;
notifyListeners();
List<Quiz> _fetchedQuiz = [];
try {
var response = await dio.get(
Constant.userParam + '/$uid' + Constant.quiz + Constant.jsonExt,
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
print("MY Complete QUIZ: ${response.data}");
if (response.statusCode == 200) {
var responseData = response.data;
responseData.forEach((String id, dynamic json) {
if (responseData != null) {
_quiz = Quiz.fromJson(id, json);
_fetchedQuiz.add(_quiz);
}
});
} else {
print("FETCH QUIZ error: ${response.data}");
}
} catch (e) {
print(e);
}
_myQuizList = _fetchedQuiz;
_isLoadingUser = false;
notifyListeners();
return _quiz;
}
class Quiz {
String id;
String quizId;
int coins;
bool isSubmit;
List<Questions> questions;
Quiz({this.id, this.quizId, this.coins, this.isSubmit, this.questions});
Quiz.fromJson(String idQuiz, Map<String, dynamic> json) {
id = idQuiz;
quizId = json['quizId'];
coins = json['coins'];
isSubmit = json['isSubmit'] == null ? false : json['isSubmit'];
if (json['questions'] != null) {
questions = new List<Questions>();
json['questions'].forEach((idQuest, vQuest) {
questions.add(new Questions.fromJson(idQuest, vQuest));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['quizId'] = this.quizId;
data['coins'] = this.coins;
data['isSubmit'] = this.isSubmit;
if (this.questions != null) {
data['questions'] = this.questions.map((v) => v.toJson()).toList();
}
return data;
}
}
class Questions {
String id;
String name;
String select;
String answer;
// bool isSave;
List<String> options;
Questions(
{this.id,
this.name,
this.select,
this.answer,
// this.isSave,
this.options});
Questions.fromJson(String id, Map<String, dynamic> json) {
id = id;
name = json['name'];
select = json['select'] == null ? '' : json['select'];
answer = json['answer'];
// isSave = false;
if (json['options'] != null) {
options = json['options'].cast<String>();
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['select'] = this.select;
data['answer'] = this.answer;
// data['isSave'] = this.isSave;
data['options'] = this.options;
return data;
}
}
任何答案都将不胜感激。
【问题讨论】:
-
我认为这是一个演员表异常。检查你的数据的 runtimeType 像这样 print(response.data.runtimeType);。此外,记录您的错误堆栈。
-
@PayamZahedi 当我检查它说 RunType
_InternalLinkedHashMap<String, dynamic> -
我试过
Map<String, dynamic>.from(json)或<String, dyanmic>.cast (json)等各种方法还是不行 -
请分享您的 JSON 结果和堆栈。
-
我在问题中添加了它@PayamZahedi