You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何传递TextEditingController变量至其他类及同类填充ListTile方案咨询

解决方案2:在_ActivitiesParticipantsState内部直接填充ListTile

如果你不想单独维护InterestedName组件,可以把文档数据获取逻辑直接整合到ListView.builder的itemBuilder中:

Expanded(
  child: ListView.builder(
    itemCount: docIDs.length,
    itemBuilder: (context, index) {
      final collectionName = activityController.text.trim();
      if (collectionName.isEmpty) {
        return const ListTile(title: Text('Please enter a collection name'));
      }
      
      return Padding(
        padding: const EdgeInsets.symmetric(vertical: 15),
        child: ListTile(
          dense: true,
          shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
          tileColor: const Color.fromARGB(255, 235, 235, 235),
          title: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 20),
            child: FutureBuilder<DocumentSnapshot>(
              future: FirebaseFirestore.instance
                  .collection(collectionName)
                  .doc(docIDs[index])
                  .get(),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.done) {
                  if (!snapshot.hasData || !snapshot.data!.exists) {
                    return const Text('Document not found');
                  }
                  
                  Map<String, dynamic> data = snapshot.data!.data() as Map<String, dynamic>;
                  return Column(
                    children: [
                      const SizedBox(height: 5),
                      Align(
                        alignment: Alignment.centerLeft,
                        child: Text(
                          'Name: ${data['name']}',
                          style: const TextStyle(
                              fontSize: 16, fontFamily: 'Quicksand', fontWeight: FontWeight.w600),
                        ),
                      ),
                      const SizedBox(height: 20),
                    ],
                  );
                }
                return const Text('loading...');
              },
            ),
          ),
        ),
      );
    },
  ),
)

这种方式省去了单独的组件,所有逻辑都集中在当前State类中,适合简单的UI场景。


额外注意事项

  • 建议在用户输入集合名称时做基本校验(比如非空、避免特殊字符),防止无效的Firestore请求。
  • 如果文档数量较多,单个FutureBuilder的性能可能不足,可以考虑用Future.wait批量获取文档,或者改用StreamBuilder实时监听数据变化。
  • 原代码中FutureBuilder没有指定future参数,会导致每次build时重复发起请求,上面的两种方案都已经修正了这个问题。

内容的提问来源于stack exchange,提问作者pika3113

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:54:07