前提
flutterでFirebase Storageに画像を保存、FirestoreにそのURLを保存するという機能を実装したいのですがエラーになります。
シミュレーターを起動して1度目はできるのですが2度目からはエラーが出てしまいまして、
それからはPCを再起動するまでできません。
バグかと思ったのですが、3日連続でなりましたので解決策を教えてください。
実現したいこと
・画像を保存したい
発生している問題・エラーメッセージ
保存ボタンを押すとこのエラーになります。
[firebase_storage/unknown] An unknown error occurred, please check the server response.
権限の問題もあるようでしたのでルールは下記にしています。
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }
firebaseAuthにてログイン状態でもできませんでした。
該当のソースコード
bookState モデル
dart
1import 'dart:io'; 2import 'package:freezed_annotation/freezed_annotation.dart'; 3 4part 'book_state.freezed.dart'; 5 6 7class BookState with _$BookState { 8 const factory BookState({ 9 String? id, 10 String? title, 11 String? author, 12 File? imgFile, 13 }) = _BookState; 14}
画像選択に関する状態管理
dart
1import 'dart:io'; 2 3import 'package:cloud_firestore/cloud_firestore.dart'; 4import 'package:flutter_riverpod/flutter_riverpod.dart'; 5import 'package:image_picker/image_picker.dart'; 6 7import '../model/book_state.dart'; 8 9final bookStateProvider = 10 StateNotifierProvider<bookStateNotifier, BookState>((ref) { 11 return bookStateNotifier(); 12}); 13 14class bookStateNotifier extends StateNotifier<BookState> { 15 bookStateNotifier() : super(const BookState()); 16 17 String? id; 18 String? title; 19 String? author; 20 String? imgUrl; 21 22 File? imgFile; 23 24 bool isLoading = false; // ローディング画面を表示するか 25 26 final ImagePicker picker = ImagePicker(); 27 28 Future<void> imagePick() async { 29 /// 画像を選択 30 final ImagePicker picker = ImagePicker(); 31 final XFile? image = await picker.pickImage(source: ImageSource.gallery); 32 imgFile = File(image!.path); 33 34 state = state.copyWith(imgFile: imgFile); 35 } 36 37 void changeTitle() { 38 state = state.copyWith(title: title); 39 } 40}
画像を選択する部分
dart
1GestureDetector( 2 child: SizedBox( 3 width: 100, 4 height: 160, 5 child: bookState.imgFile != null 6 ? Image.file(bookState.imgFile!) 7 : Container( 8 color: Colors.grey, 9 ), 10 ), 11 onTap: () async { 12 await ref.read(bookStateProvider.notifier).imagePick(); 13 }, 14 ),
画像を保存する部分
dart
1TextButton( 2 onPressed: (() async { 3 final doc = FirebaseFirestore.instance 4 .collection('books') 5 .doc(); 6 await FirebaseStorage.instance 7 .ref('books/${doc.id}') 8 .putFile(bookState.imgFile!); 9 }), 10 child: Text('画像だけ試し')),
エラー箇所はここです。
await FirebaseStorage.instance.ref('books/${doc.id}').putFile(bookState.imgFile!);
試したこと
storageのルールの変更など行いましたがダメでした。
最初の1度だけできるのも謎です。
補足情報(FW/ツールのバージョンなど)
flutter 3.0
cupertino_icons: ^1.0.2 firebase_core: ^1.20.0 cloud_firestore: ^3.4.3 flutter_riverpod: ^1.0.4 flutter_slidable: ^2.0.0 firebase_storage: ^10.3.7 image_picker: ^0.8.5+3 freezed_annotation: ^2.1.0 json_annotation: ^4.6.0 firebase_auth: ^3.7.0

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。