Работа со значениями построителя потоков

# #firebase #flutter #google-cloud-firestore #typeerror

Вопрос:

Это должно быть просто, но я занимаюсь этим уже несколько дней!

 ///StreamBuilder StreamBuilder(  stream: farmacos.orderBy("nome", descending: false).snapshots(),  builder: (context, AsyncSnapshotlt;QuerySnapshotgt; streamSnapshot) {  if (!streamSnapshot.hasData) {  return const Text("No data...");  }  return ListView.builder(  itemCount: streamSnapshot.data!.docs.length,  itemBuilder: (context, index) =gt; GestureDetector(  onTap: () {},  child: Card(  color: Colors.amberAccent[100],  child: Padding(  padding: EdgeInsets.fromLTRB(_margem * .1,  _margem * .1, _margem * .1, _margem * .1),  child: Row(  crossAxisAlignment: CrossAxisAlignment.center,  mainAxisAlignment: MainAxisAlignment.spaceBetween,  children: [   ///Get data from the stream    Text(streamSnapshot.data!.docs[index]["nome"].toString()), //Ex: Paracetamol  Text(streamSnapshot.data!.docs[index]["dose_ml_Kg"].toString(),), //Ex: 40  Text(streamSnapshot.data!.docs[index]["dose_max"].toString(),), //Ex: 1000   ],  ),  ),  ),  )  );  },  ),  

Вот результат

Теперь я хочу выполнить операцию с данными, как это:

 Text(streamSnapshot.data!.docs[index]["nome"].toString()),   Text(streamSnapshot.data!.docs[index]["dose_ml_Kg"].toString(),),   Text(streamSnapshot.data!.docs[index]["dose_max"].toString(),),    _dose = streamSnapshot.data!.docs[index]["dose_ml_Kg"]*20,   Text("$_dose"),  

И ошибка в том, что:

тип «int» не является подтипом типа «Виджет»

Что случилось где?

Ответ №1:

Вы не можете объявить var внутри списка детей, что вам нужно сделать, это

 streamSnapshot.data!.docs.length,  itemBuilder: (context, index){  _dose = streamSnapshot.data!.docs[index]["dose_ml_Kg"]*20;  return GestureDetector(  onTap: () {}  ,  child: Card(  color: Colors.amberAccent[100],   child: Padding(  padding: EdgeInsets.fromLTRB(_margem * .1,  _margem * .1, _margem * .1, _margem * .1),   child: Row(  crossAxisAlignment: CrossAxisAlignment.center,  mainAxisAlignment: MainAxisAlignment.spaceBetween,  children: [  ///Get data from the stream  Text(streamSnapshot.data!.docs[index]["nome"].toString()), //Ex: Paracetamol  Text(streamSnapshot.data!.docs[index]["dose_ml_Kg"].toString(),), //Ex: 40  Text(streamSnapshot.data!.docs[index]["dose_max"].toString(),),  Text("$_dose"),//Ex: 1000  //Text("$_dose"),  ],  ),  ),  ),  );  },  );  },  ),  

Комментарии:

1. Здравствуйте, Артур Сикора. Большое спасибо за помощь. В этом месте [индекс] выдает ошибку! Может быть, потому, что его вызывают до того, как он объявлен. Как я могу это исправить?

2. О, моя вина, прости. Просто объявите _dose в разделе listview.builder непосредственно перед возвращением GestureDetector

3. Спасибо, Артур. Теперь это решило проблему. Заботиться.