Reputation: 35
I want to extract data from Firebase Realtime database and convert it to a model. But I am getting this error. I couldn't understand where I went wrong. How can I do it?
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;
}
folder_model.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"];
}
incoming data:
{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}}
Error:
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)
Edit:
I solved it this way:
if(map["accounts"]!= null){
var mapList = List<Map<dynamic, dynamic>>.from(map["accounts"].values);
for(var currentMap in mapList ){
accounts.add(Account.fromMap(currentMap));
}
}
Upvotes: 2
Views: 89
Reputation: 4098
First, I think the problem as read from the error here is that from this line:
this.accounts = List.from(map["accounts"].map((x) => Account.fromMap(x)));
map["accounts"]
is a Map and not a List of Account, this is the reason for this error.
Map<dynamic,dynamic>.map((K,V)=>...)
List<dynamic>.map((x)=>...)
Note here that the map function on Map splits all the key-value pairs so from your code, accounts
should be a List of maps where each map contains data for an Account.
Upvotes: 1