0

The below code gives an error of subtype

Data Structure

code

StreamBuilder(
        stream: _database.orderByKey().onValue,
        builder: (context, snapshot) {
          final valudisp = <Card>[];
          if (snapshot.hasData) {
            final firstdata = snapshot.data! as Map<String, dynamic>;
            firstdata.forEach((key, value) {
              final datalast = new Map<String, dynamic>.from(value);
              final coinname = datalast.keys;
              final displaycard = Card(...);
              valudisp.add(displaycard);
             });
          }
          return Expanded(...);
       }); 
      }    

Now I'm getting below error

type 'DatabaseEvent' is not a subtype of type 'Map<String,dynamic>' in typecast
nvoigt
  • 75,013
  • 26
  • 93
  • 142

2 Answers2

0

I think you're looking for the DatabaseEvent class there:

(snapshot.data! as DatabaseEvent).snapshot.value
                 // 
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
0

This code works fine.

map the first snapshot as <Object, dynamic>.

StreamBuilder(
        stream: _database.onValue,
        builder: (context, snapshot) {
          final valudisp = <Card>[];
          if (snapshot.hasData) {
            final firstdata = (snapshot.data! as DatabaseEvent)
                .snapshot
                .value as Map<Object?, dynamic?>;
            firstdata.forEach((key, value) {
              final datalast = new Map<String, dynamic>.from(value);
              final coinname = datalast['namedata'];
              final _diff = datalast['dif'];
              final time = datalast['Time'];
              final Quantity = datalast['Quantity'];
              final tradep = datalast['tradep'];
              final displaycard =Card(...)