Прежде всего, я думаю, что вы должны ListTile или другой виджет (Image, Raw..et c) как конструктор виджетов, а не другой ListView внутри другого ListView !!
так что ваш код будет таким же простым и onTap обратный вызов при каждой загрузке, когда пользователь нажимает на элемент, если вы хотите сделать более сложный виджет, просто замените ListTile новым виджетом
StreamBuilder(
stream: Firestore.instance.collection('branch11').snapshots(),
builder: (context,snapshot){
if(!snapshot.hasData) return CircularProgressIndicator();
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context,index){
DocumentSnapshot subjects= snapshot.data.documents[index];
return ListTile(
title: Text(subjects['name']),
onTap: (){
String downloadUrl = subjects['download'];
String name= subjects['name'];
debugPrint("name at $index =$name");
debugPrint("downloadUrl at $index =$downloadUrl");
//do what you want here
},
);
},);
},
);
для отправки данных между экранами - Сделайте так, чтобы конструктор SecondScreen принял параметр для типа данных, которые вы хотите отправить на него. В этом конкретном примере данные определены как строковые значения и задаются здесь с помощью this.text
class SecondScreen extends StatelessWidget {
final String text;
SecondScreen({Key key, @required this.text}) : super(key: key);
...
Затем используйте навигатор в виджете FirstScreen, чтобы выбрать sh маршрут к виджету SecondScreen , Вы помещаете данные, которые хотите отправить, в качестве параметра в его конструктор.
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondScreen(text: 'Hello',),
));