0
votes

I am working on a flutter project, and am stuck at a place where i have to retrieve the data from firebase. i want to get the data of 'products', these are the fields in my product.

class Product {
  final String product_id;
  final String title;
  final String description;
  final double price;
  final String image;
  final bool isFavorite;
  final String id;
  final String email;

  Product({
    @required this.product_id,
    @required this.title,
    @required this.description,
    @required this.image,
    @required this.price,
    @required this.email,
    @required this.id,
    this.isFavorite = false,
  });
}

this is how i store my data.

Map<String, dynamic> productdata = {
      'title': title,
      'description': description,
      'image':
      'https://upload.wikimedia.org/wikipedvdkfjngjsdnga/a5.jpg',
      'price': price,
      'id': _authenticatedUser.id,
      'email':_authenticatedUser.email,
    };
    http
        .post('https://flutter-blah_blah.firebaseio.com/products.json',
        body: json.encode(productdata));

when I run a get command in order to retrieve the data get commnd:

http.get('https://flutter-blah_blah.firebaseio.com/products.json')
        .then((http.Response response) {
          print(json.decode(response.body));

i get this output for the code above

{-L_x5_aGpDN-bbrqqqqi: {description: kkkkkkk, email: [email protected], id: fghjdgf, image: https://upload.wikimedia.org/wikipedia/commons/a/a5/Red_Kitten_01.jpg, price: 111.0, title: kitten}, -L_x7ffhrotslg4vS: {description: kkkkkkkk, email: [email protected], id: fghjdgf, image: https://upload.wikimedia.org/wikipedia/commons/a/a5/Red_Kitten_01.jpg, price: 111.0, title: kitten 2}}

as you can clearly see, I already got 2 rows in my firebase table. but after that, I get the problem in my next command in the function i.e:

final Map<String, Map<String, dynamic>> productListData = json.decode(response.body);

I get a huge error error:

I/flutter ( 6106): _InternalLinkedHashMap<String, dynamic>
E/flutter ( 6106): [ERROR:flutter/shell/common/shell.cc(186)] Dart Error: Unhandled exception:
E/flutter ( 6106): type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, Map<String, dynamic>>'
E/flutter ( 6106): #0      _MainModel&Model&ConnectedProduct&UserModel&ProductsModel.fetchProducts.<anonymous closure> (package:udemy/scoped_models/connected_product.dart:109:47)
E/flutter ( 6106): #1      _RootZone.runUnary (dart:async/zone.dart:1379:54)
E/flutter ( 6106): #2      _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
E/flutter ( 6106): #3      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
E/flutter ( 6106): #4      Future._propagateToListeners (dart:async/future_impl.dart:668:32)
E/flutter ( 6106): #5      Future._complete (dart:async/future_impl.dart:473:7)
E/flutter ( 6106): #6      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter ( 6106): #7      _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
E/flutter ( 6106): #8      _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:294:13)
E/flutter ( 6106): #9      _withClient (package:http/http.dart)
E/flutter ( 6106): <asynchronous suspension>
E/flutter ( 6106): #10     get (package:http/http.dart:46:5)
E/flutter ( 6106): #11     _MainModel&Model&ConnectedProduct&UserModel&ProductsModel.fetchProducts (package:udemy/scoped_models/connected_product.dart:104:5)
E/flutter ( 6106): #12     _ProductPageState.initState (package:udemy/pages/products.dart:21:18)
E/flutter ( 6106): #13     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3830:58)
E/flutter ( 6106): #14     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 6106): #15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #17     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 6106): #18     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #20     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter ( 6106): #21     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 6106): #22     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter ( 6106): #23     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 6106): #24     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #25     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #26     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 6106): #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #28     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #29     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 6106): #30     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #32     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 6106): #33     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #35     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 6106): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter ( 6106): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 6106): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter ( 6106): #41     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
E/flutter ( 6106): #42     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 6106): #43     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 6106): #44     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 6106): #45     ComponentElement.performRebuild (packag

how do I fix this? I need to store that decoded response in a Map<\string, Map<\string, dynamic>> variable, go through each and every element/row using forEach command, store it in a list of type "Product" (Product class is mentioned above) and display on my app page. how do I do it?

1

1 Answers

0
votes

Just change,

final Map<String, Map<String, dynamic>> productListData = json.decode(response.body)

to

final Map<String, Map<String, dynamic>> productListData = json.decode(response.body)?.cast<String, Map<String, dynamic>>();

Hope that helps!