【问题标题】:how to pass the data of a more than one text widget to a list of strings based on index of text widget in flutter如何根据颤动中文本小部件的索引将多个文本小部件的数据传递给字符串列表
【发布时间】:2020-05-01 02:36:16
【问题描述】:

我正在通过 StreamBuilder 以包含文本小部件的 ListView 的形式从 firestore 获取数据。我想使用 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

Snapshot Image

【问题讨论】:

  • 请多加解释!!
  • 列表视图包含文本小部件,其数据是从 firestore 集合“branch11”中获取的。我想要做的是使用 toString() 将这些文本小部件转换为字符串。假设列表视图中有 4 个文本小部件,我希望将它们转换为 4 个不同的字符串,而不仅仅是一个字符串。
  • 和“下载”是你的领域的关键??如果可以添加您的 Firestore 快照图像
  • 是的,“下载”是我的字段的关键,其中包含一个 url
  • 当用户点击下载/预览按钮时,他会被重定向到一个由 webview 组成的新屏幕,该屏幕的初始 url 以 listview 中文本小部件的形式从 firestore 获取。问题是我想将这些文本小部件转换为字符串,但我不知道如何将这些文本小部件转换为字符串,因为会有多个文本小部件。

标签: android flutter dart google-cloud-firestore


【解决方案1】:

首先,我认为您必须将 ListTile 或另一个小部件(Image、Raw..etc)作为小部件构建器,而不是另一个 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 小部件中的导航器将路由推送到 SecondScreen 小部件。您将要发送的数据作为参数放入其构造函数中。

Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => SecondScreen(text: 'Hello',),
    ));

【讨论】:

  • 谢谢你,它确实解决了我的主要问题,但是如何将 downloadUrl 字符串的数据传递到另一个屏幕?
  • @youtubegamer 我正在编辑答案,如果对您有帮助,请让我的答案正确
  • 非常感谢。我把它弄复杂了,但你用一种简单的方式解决了它。
猜你喜欢
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2021-03-13
  • 2020-12-11
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多