я хочу создать представление списка с firebase во флаттере, в котором будут отображаться заголовок, подзаголовок и изображение, а когда пользователь нажмет на представление списка, откроется веб-представление

# #firebase #flutter #google-cloud-firestore

Вопрос:

Я создаю приложение flutter, в котором я хочу создать представление списка с firebase в flutter, в котором будут отображаться заголовок, подзаголовок и изображение, и когда пользователь нажмет на listview, откроется веб-представление, но я хочу, чтобы URL-адрес веб-представления исходил из подзаголовка заголовка firebase и части изображения, которая уже работает. Я застрял в части URL, пожалуйста, помогите, как это сделать

 import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:watched_movie_list/Widget/webviewx.dart';

class ListviewPage extends StatefulWidget {
  final firBaseLists;
  final String webviewTitle;
  final String weburl;

  ListviewPage(
      {this.firBaseLists, required this.webviewTitle, required this.weburl});

  @override
  _ListviewPageState createState() => _ListviewPageState();
}

class _ListviewPageState extends State<ListviewPage> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: FirebaseFirestore.instance.collection('listview').snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (!snapshot.hasData) {
         return Center(
            child: CupertinoActivityIndicator(
              radius: 20,
            ),
          );
        }
        return Scaffold(
          appBar: AppBar(
            title: Text(
              ' नवीनतम सूचनाएं',
              style: TextStyle(color: Colors.black),
            ),
            leading: BackButton(color: Colors.black),
            backgroundColor: Colors.white,
          ),
          body: Container(
            height: 800,
            color: Color(0xfff5f5f5),
            child: ListView(
              children: snapshot.data!.docs.map((DocumentSnapshot document) {
                Map<String, dynamic> data =
                    document.data()! as Map<String, dynamic>;
                return InkWell(
                  onTap: () {
                    Navigator.push(
                        context,
                        MaterialPageRoute(
                            builder: (context) => InAppWebViewx(
                                  title: widget
                                      .firBaseLists["${data['titletext']}"],
                                  url: widget.firBaseLists("${data['url']}"),
                                )));
                  },
                  child: Container(
                    height: 150,
                    decoration: BoxDecoration(
                        color: Colors.lightGreen,
                        borderRadius: BorderRadius.circular(18)),
                    margin:
                        EdgeInsets.only(top: 8, right: 12, left: 12, bottom: 2),
                    child: Row(
                      children: [
                        Container(
                          padding: const EdgeInsets.only(top: 15, left: 20),
                          height: 150,
                          width: 330,
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.center,
                            children: [
                              Image.network(
                                "${data['img']}",
                                height: 40,
                                width: 40,
                              ),
                              Padding(
                                padding: const EdgeInsets.only(top: 8.0),
                                child: Text(
                                  "${data['titletext']}",
                                  style: TextStyle(
                                    fontSize: 15,
                                    fontWeight: FontWeight.bold,
                                    color: Colors.white,
                                  ),
                                ),
                              ),
                              Padding(
                                padding: const EdgeInsets.only(top: 8.0),
                                child: Text(
                                  "${data['subtitle']}",
                                  maxLines: 2,
                                  style: TextStyle(
                                    fontSize: 12,
                                    fontWeight: FontWeight.bold,
                                    color: Colors.white,
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                );
              }).toList(),
            ),
          ),
        );
      },
    );
  }
}```
 

Ответ №1:

Вы должны использовать Listview.builder вместо Listview. Внутри Listview.builder вы можете захватить данные с индексом itemBuilder и передать их в веб-представление. Вот ссылка для начала работы с Listview.builder https://www.geeksforgeeks.org/listview-builder-in-flutter/