1

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.

  • Have you already checked the [firestore documentation](https://firebase.flutter.dev/docs/firestore/usage)? – FJCG Feb 02 '21 at 22:41
  • 1
    Please check this related [SO question](https://stackoverflow.com/questions/47957796/flutter-httpclient-invalid-arguments-no-host-specified-in-uri) . You might have to add the `http://`before your API URL example `gorsel` – marian.vladoi Feb 03 '21 at 09:11
  • i check almost every sources including firebase documentations before asking a question here @FJCG. i checked _SO question_ and tried adding `http://`, `https://` in different ways but still getting same result @marian.vladoi. beside this i tried different streams that working in other places in `StreamBuilder` doing necessary editions still getting same error interestingly. Maybe i must delete all the page and the parent collection named `ders_sinavlari_olusturulanlar` that above mentioned and rewrite them. – kalfalarin_omer Feb 03 '21 at 12:03
  • Yes, I believe deleting all pages and rewriting them might be a solution to understand your issue. – marian.vladoi Feb 04 '21 at 10:59
  • i removed all the codes, pages and stuffs recorded to firebase firestore and rewrite them 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 these were happennig reversely so the Page was returning null. after i did all of them step by step by different `RisedButtons` , all of errors gone and happy end. thanks for your helps. – kalfalarin_omer Feb 08 '21 at 17:12

1 Answers1

1

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.