मैं पूछना चाहता हूं कि क्या listTile के लिए Navigator.push फ़ंक्शन का उपयोग करके उपयोगकर्ता की दस्तावेज़ आईडी को अगले पृष्ठ पर भेजना संभव है।

वर्तमान में मैं फायरस्टोर से सभी डेटा पुनर्प्राप्त करने के लिए StreamBuilder का उपयोग कर रहा हूं:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Registration Approval'),
      ),
      body: StreamBuilder(
        stream:
        Firestore.instance.collection('user')
        .where('userapproval', isEqualTo: '0')
            .orderBy('FullName')
            .snapshots(),
        builder: buildUser,
      ),
    );
  }

और मैं ListTile बनाने के लिए ListView.builder का उपयोग कर रहा हूं:

Widget buildUser(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
    return ListView.builder(
      itemCount: snapshot.data.documents.length,
      itemBuilder: (context, index){
        DocumentSnapshot user = snapshot.data.documents[index];

        return ListTile(
          leading: CircleAvatar(
            backgroundImage: NetworkImage(
              user.data['image']
            ),
          ),
          title: Text(user.data['FullName']),
          subtitle: Text(user.data['SSID']),
          onTap: (){
            Navigator.push(context, new MaterialPageRoute
              (builder: (context) => FullDetailPage(

            )));
          },
        );
      },
    );
  }

समस्या यह है कि मैं उपयोगकर्ता के दस्तावेज़ आईडी में किसी अन्य पृष्ठ पर कैसे जा सकता हूं। क्या मैं आईडी को एक स्ट्रिंग में स्टोर करता हूं? तो String _id = user.data[ID] जैसा कुछ। कुछ उदाहरण की बहुत सराहना की जाती है। धन्यवाद।

**वह SSID नहीं जिसका मैं उल्लेख कर रहा हूँ। उपयोगकर्ता का दस्तावेज़ आईडी वह आईडी है जो फायरबेस फायरस्टोर में है।

0
randomstudent 1 जुलाई 2021, 14:45

3 जवाब

सबसे बढ़िया उत्तर

मुझे पता चला कि इसे कैसे काम करना है।

मैं दस्तावेज़ आईडी पुनर्प्राप्त करने के लिए बस snapshot.data.documents[index].documentID में जोड़ सकता हूं।

onTap: (){
            Navigator.push(context, new MaterialPageRoute
              (builder: (_) => FullDetailPage(
                (snapshot.data.documents[index].documentID)
            )));
          },

फिर कोड की इस 2 लाइन को FullDetailPage में जोड़कर

final String docID;

FullDetailPage(this.docID);

यह 2 डॉक आईडी प्राप्त करने में सक्षम होगा। उन लोगों के लिए बहुत-बहुत धन्यवाद जो इस समस्या में मेरी मदद करते हैं। धन्यवाद।

0
randomstudent 2 जुलाई 2021, 09:07

आप की id प्रॉपर्टी पर कॉल करके दस्तावेज़ आईडी प्राप्त कर सकते हैं DocumentSnapshot

  DocumentSnapshot user = snapshot.data.documents[index];
  String documentId = user.id;

आप इसे कंस्ट्रक्टर के माध्यम से अगले पेज पर इस तरह से पास कर सकते हैं:

 Navigator.push(context, new MaterialPageRoute
   (builder: (context) => FullDetailPage(
     documentId: documentId 
 )));
1
Victor Eronmosele 1 जुलाई 2021, 13:11

अपनी FullDetailPage कक्षा में एक कंस्ट्रक्टर को परिभाषित करें

class FullDetailPage extends StatefulWidget {
  const FullDetailPage({this.documentId});

  final String documentId;

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

class _FullDetailPageState extends State<FullDetailPage> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(widget.documentId), /// this is how you can use document id
    );
  }
}

और इस तरह इस पेज पर नेविगेट करें

Navigator.push(
              context,
              new MaterialPageRoute(
                builder: (context) => FullDetailPage(
                  documentId: user.data['SSID'], /// your document id
                ),
              ),
            );
1
Hemal 1 जुलाई 2021, 11:50