【发布时间】:2021-03-16 22:10:46
【问题描述】:
我想从 Firebase 实时数据库中提取数据并将其转换为模型。但我收到了这个错误。我不明白我哪里出错了。我该怎么做?
firebase_db_services.dart:
final databaseReference = FirebaseDatabase.instance.reference();
Future<List<Folder>> fetchFolders(String userID) async{
var snapshot =await databaseReference.child("users").child(userID).child("folders").once();
var result = await snapshot.value.values as Iterable;
List<Folder> folderList = List();
for(var item in result) {
folderList.add(Folder.fromMap(item));
}
return folderList;
}
文件夹模型.dart:
Folder.fromMap(Map<dynamic, dynamic> map) {
this.folderName = map['folder_name'];
this.folderColor = Color(map["folder_color"]);
this.folderCreateDate = DateTime.parse(map['folder_create_date'].toString());
this.accounts = List<Account>.from(map["accounts"].map((x) => Account.fromMap(x)));
}
account_model.dart:
Account.fromMap(Map<dynamic, dynamic> map) {
this.accountName = map['account_name'];
this.accountEmail = map['account_mail'];
this.accountPassword = map['account_password'].toString();
this.accountCreateTime = DateTime.parse(map['account_createTime']);
this.favorite = map["favorite"];
}
传入数据:
{sosya_medya: {folder_create_date: 2020-12-04 19:08:46.066142, accounts: {account_password: account_password, account_mail: account_mail, account_name: account_name, account_createTime: 2020-12-04 19:08:46.066142, favorite: false}, folder_color: 4294198070, folder_name: sosyal_medya}}
错误:
E/flutter (32674): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type '(dynamic) => Account' is not a subtype of type '(dynamic, dynamic) => MapEntry<dynamic, dynamic>' of 'transform'
E/flutter (32674): #0 new Folder.fromMap (package:flutter_save_password/models/folder_model.dart:30:56)
E/flutter (32674): #1 FirestoreDBService.fetchFolders (package:flutter_save_password/services/storage/firebase_db_services.dart:56:29)
E/flutter (32674): <asynchronous suspension>
E/flutter (32674): #2 UserRepository.fetchFolders (package:flutter_save_password/services/repository/user_repository.dart:86:40)
E/flutter (32674): #3 PasswordSaveViewModel.fetchFolders (package:flutter_save_password/view_model/save_password_view_model.dart:59:37)
E/flutter (32674): #4 HomePage.build.<anonymous closure> (package:flutter_save_password/app/pages/home_page.dart:32:18)
E/flutter (32674): #5 Consumer.buildWithChild (package:provider/src/consumer.dart:175:19)
E/flutter (32674): #6 SingleChildStatelessWidget.build (package:nested/nested.dart:260:41)
E/flutter (32674): #7 StatelessElement.build (package:flutter/src/widgets/framework.dart:4701:28)
E/flutter (32674): #8 SingleChildStatelessElement.build (package:nested/nested.dart:280:18)
E/flutter (32674): #9 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
E/flutter (32674): #10 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (32674): #11 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter (32674): #12 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter (32674): #13 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:223:11)
E/flutter (32674): #14 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter (32674): #15 Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter (32674): #16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (32674): #17 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (32674): #18 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter (32674): #19 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter (32674): #20 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter (32674): #21 Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter (32674): #22 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (32674): #23 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
编辑:
我是这样解决的:
if(map["accounts"]!= null){
var mapList = List<Map<dynamic, dynamic>>.from(map["accounts"].values);
for(var currentMap in mapList ){
accounts.add(Account.fromMap(currentMap));
}
}
【问题讨论】:
标签: flutter firebase-realtime-database