Я установил эти разрешения в целях отладки на своем пожарном депо.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
Теперь я пытаюсь создать новый документ в коллекции после загрузки изображения, но получаю ошибку.
Это мой код флаттера
StorageUploadTask putFile =
storage.ref().child("region/$fileName").putFile(_regionImage);
UploadTaskSnapshot uploadSnapshot = await putFile.future;
print("image uploaded");
var regionData = new Map();
regionData["label"] = _textController.text;
var pictureData = new Map();
pictureData["url"] = uploadSnapshot.downloadUrl.toString();
pictureData["storage"] = "gs://app-db.appspot.com/region/$fileName";
regionData["picture"] = pictureData;
DocumentReference currentRegion =
Firestore.instance.collection("region").document(fileName);
Firestore.instance.runTransaction((transaction) async {
DocumentSnapshot freshSnap = await transaction.get(currentRegion);
print(freshSnap.exists);
await transaction.set(currentRegion, regionData);
print("instance created");
});
Это мой консольный журнал https://gist.github.com/matejthetree/c34d0dcba507acd511773ae9b14a8725
Я следил за новым Google Codelab и загружал и получал изображения из хранилищаработает, также работает сбор данных, созданных мной из консоли Firebase.
Пример поиска рабочей коллекции:
body: StreamBuilder(
stream: Firestore.instance.collection("region").snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return const Text('Loading...');
return new ListView.builder(
itemCount: snapshot.data.documents.length,
padding: const EdgeInsets.only(top: 10.0),
itemBuilder: (context, index) {
DocumentSnapshot ds = snapshot.data.documents[index];
var imageUrl = ds["picture"]["url"];
var imageLabel = ds["label"];
var imageCard = new RegionCard(imageUrl, imageLabel);
return imageCard;
},
);
},
),
Как подходить к созданию новых документов в коллекции?
Как сказал @gunter в комментариях, наличие публичных разрешений на запись было оченьплохо, поэтому я решил попробовать войти.