как передать данные более чем одного текстового виджета в список строк на основе индекса текстового виджета во флаттере - PullRequest
0 голосов
/ 14 января 2020

Я получаю данные из firestore через StreamBuilder в виде ListView, содержащего текстовые виджеты. Я хочу передать данные каждого текстового виджета в отдельную строку, используя toString (). Как преобразовать каждый текстовый виджет в строку отдельно на основе индекса?

Widget download(){
return 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 ListView(
        children: <Widget>[
          Text('${subjects['download']}'),
      ],);
    },);
 },
);

String pdfUrl = download().toString();

Firestore image

Снимок изображения

1 Ответ

0 голосов
/ 14 января 2020

Прежде всего, я думаю, что вы должны 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',),
    ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...