kalfalarin_omer
kalfalarin_omer

Reputation: 85

cant get subcollection in firebase firestore

i cant get subcollection that i created before. i am able to create subcollection named "sinav_gorselleri" after i pressed this RaisedButton and going to SinavOlusturPage with this code:

RaisedButton(
                  color: Colors.blue,
                  child: Text("Sınav oluştur"),
                  onPressed: () async{
                   final newDoc =  await FirebaseFirestore.instance.collection("ders_sinavlari_olusturulanlar")
                        .add({"baslik": "4oluşturulanSınav2", "gorsel": "gorsel", "konu": "", "ogretmen": "ömer kalfa",
                      "sira": 3, "tarih": ""});
                   final idnewDoc = newDoc.id;
                   debugPrint(idnewDoc);
                   final newDoc_newCol =  await newDoc.collection("sinav_gorselleri")
.add({"gorsel": "https://firebasestorage.googleapis.com/v0/b/sbycpaldemo.appspot.com/o/ders_notlari_gorseller%2Fyeni?alt=media&token=4af59ada-4a8b-45cc-86ef-2f691a5baf62"});
                   final idnewCol = await newDoc_newCol.id;
                    debugPrint(idnewCol);
                    Navigator.of(context,rootNavigator: true).pop('dialog');
                   Navigator.push(context, MaterialPageRoute(builder: (context)=> SinavOlusturPage(idnewDoc: idnewDoc,)));
                  }),

and in SinavOlusturPage i am expecting to get first doc in subcollection named "sinav_gorselleri" but cant get it with this code:

import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

class SinavOlusturPage extends StatefulWidget{
  final idnewDoc;
  const SinavOlusturPage({Key key, this.idnewDoc}) : super(key: key);
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return SinavOlusturPageState(this.idnewDoc);
  }

}

class SinavOlusturPageState extends State {
  final idnewDoc;
  SinavOlusturPageState(this.idnewDoc);

  File _imageSelected;
  final _formKey = GlobalKey<FormState>();
  final _scaffoldKey = GlobalKey<ScaffoldState>();
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(key: _scaffoldKey,
      appBar: AppBar(
        title: Text("SINAV OLUŞTURMA SAYFASI"),
      ),
      body: ListView(
        children: [
          Center(
            child: Text("..."),
          StreamBuilder(
            stream: FirebaseFirestore.instance.collection("ders_sinavlari_olusturulanlar/$idnewDoc/sinav_gorselleri").snapshots(),
            builder: (context, snapshot){
              final querySnapshot = snapshot.data();
              return GridView.builder(
                itemCount: 3,
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    mainAxisSpacing: 10, crossAxisCount: 2,),
                  itemBuilder: (context, index){
                  final mapOlusturulan = querySnapshot.docs[index].data();
                  final idOlusturulan = querySnapshot.docs[index].id;
                  return GridTile(
                    child: Center(
                        child: Image.network(mapOlusturulan["gorsel"])),
                  );
                  });
            })
        ],
      ),

    );
  }
}

i did tried FirebaseFirestore.instance.collection("ders_sinavlari_olusturulanlar").doc(idnewDoc) .collection("sinav_gorselleri").snapshots(), also but cant do it. here is my error that i get all the time:

Performing hot reload...
Syncing files to device SNE LX1...

════════ Exception caught by image resource service ════════════════════════════════════════════════
The following ArgumentError was thrown resolving an image codec:
Invalid argument(s): No host specified in URI file:///gorsel

When the exception was thrown, this was the stack: 
#0      _HttpClient._openUrl (dart:_http/http_impl.dart:2407:9)
#1      _HttpClient.getUrl (dart:_http/http_impl.dart:2328:48)
#2      NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:89:59)
#3      NetworkImage.load (package:flutter/src/painting/_network_image_io.dart:50:14)
#4      ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:504:13)
...
Image provider: NetworkImage("gorsel", scale: 1.0)
Image key: NetworkImage("gorsel", scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The method 'call' was called on null.
Receiver: null
Tried calling: call()
The relevant error-causing widget was: 
  StreamBuilder<QuerySnapshot> file:///C:/ornekler/sby_cpal_demo/lib/Dersler/SinavOlusturPage.dart:39:9
════════════════════════════════════════════════════════════════════════════════════════════════════
Reloaded 22 of 694 libraries in 3.748ms.

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building StreamBuilder<QuerySnapshot>(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot<QuerySnapshot>>#41144):
Class 'QuerySnapshot' has no instance method 'call'.
Receiver: Instance of 'QuerySnapshot'
Tried calling: call()

The relevant error-causing widget was: 
  StreamBuilder<QuerySnapshot> file:///C:/ornekler/sby_cpal_demo/lib/Dersler/SinavOlusturPage.dart:39:9
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      SinavOlusturPageState.build.<anonymous closure> (package:sby_cpal_demo/Dersler/SinavOlusturPage.dart:42:50)
#2      StreamBuilder.build (package:flutter/src/widgets/async.dart:525:81)
#3      _StreamBuilderBaseState.build (package:flutter/src/widgets/async.dart:129:48)
#4      StatefulElement.build (package:flutter/src/widgets/framework.dart:4744:28)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by image resource service ════════════════════════════════════════════════
Invalid argument(s): No host specified in URI file:///gorsel
════════════════════════════════════════════════════════════════════════════════════════════════════

"gorsel" is my unique field key of subcollection document. this error realy makes me tired but really need to use subcollections in my app.

Upvotes: 1

Views: 122

Answers (1)

kalfalarin_omer
kalfalarin_omer

Reputation: 85

i didnt solved this with codings i just removed all the codes, pages and stuffs recorded to firebase firestore and rewrite them all step by step. i guess i get the reason of the error. it was about navigation time. after i pressed the button named Sinav Oluştur i was expecting the creation of the subcollection named "soru_gorselleri" of new document firstly and then navigation to SinavOlusturPage but all of these were happennig reversely so the Page was returning null. after i did all of them step by step with different RisedButtons , all of errors gone and happy end.

Upvotes: 1

Related Questions