実現したいこと
- Storageへの画像アップロードで正しい挙動を得たい。
前提
現在起きている事象としてプロフィール編集ページと投稿ページの画像で表示される画像が同じになってしまう事象が発生しており、理想の挙動としてはプロフィール編集ページでアップロードした画像と投稿ページでアップロードした画像はそれぞれ独立した挙動をしてほしいと思っています。
発生している問題・エラーメッセージ
プロフィール編集ページと投稿ページの画像で表示される画像が同じになってしまっている
該当のソースコード
function_utils.dart
1import 'dart:io'; 2 3import 'package:firebase_storage/firebase_storage.dart'; 4import 'package:flutter/foundation.dart'; 5import 'package:flutter/cupertino.dart'; 6import 'package:image_picker/image_picker.dart'; 7import 'package:permission_handler/permission_handler.dart'; 8 9class FunctionUtils { 10 static Future<dynamic> getImageFromGallery(BuildContext context) async { 11 try { 12 ImagePicker picker = ImagePicker(); 13 PermissionStatus permissionStatus = await Permission.photos.request(); 14 if (permissionStatus.isGranted) { 15 final pickedFile = await picker.pickImage(source: ImageSource.gallery); 16 if (pickedFile != null) { 17 return File(pickedFile.path); 18 } else { 19 return null; 20 } 21 } else if (permissionStatus.isDenied || 22 permissionStatus.isPermanentlyDenied) { 23 if (kDebugMode) { 24 print("Access Denied."); 25 } 26 if (context.mounted) { 27 bool isOpened = await showAlertDialog(context); 28 if (isOpened) { 29 permissionStatus = await Permission.photos.request(); 30 if (permissionStatus.isGranted) { 31 final pickedFile = 32 await picker.pickImage(source: ImageSource.gallery); 33 if (pickedFile != null) { 34 return File(pickedFile.path); 35 } else { 36 return null; 37 } 38 } else { 39 return false; 40 } 41 } else { 42 return false; 43 } 44 } 45 } else { 46 if (kDebugMode) { 47 print("Exception occured."); 48 } 49 if (context.mounted) return; 50 showAlertDialog(context); 51 return false; 52 } 53 } catch (e) { 54 if (kDebugMode) { 55 print("$e"); 56 } 57 showAlertDialog(context); 58 return false; 59 } 60 // final pickedFile = await picker.pickImage(source: ImageSource.gallery); 61 // return File(pickedFile!.path); 62 // if (pickedFile != null) { 63 // setState(() { 64 // image = File(pickedFile.path); 65 // }); 66 // } 67 } 68 69 static Future<bool> showAlertDialog(BuildContext context) async { 70 bool isOpened = false; 71 await showCupertinoDialog<bool>( 72 context: context, 73 barrierDismissible: false, 74 builder: (BuildContext context) => CupertinoAlertDialog( 75 title: const Text("Allow access to Photos"), 76 content: const Text( 77 "This will allow you to share the contents of your camera roll and use other functions. Go to Settings and tap Photos."), 78 actions: [ 79 CupertinoDialogAction( 80 isDestructiveAction: true, 81 onPressed: () { 82 Navigator.pop(context, false); 83 }, 84 child: const Text( 85 "Cancel", 86 ), 87 ), 88 CupertinoDialogAction( 89 isDefaultAction: true, 90 onPressed: () { 91 isOpened = true; 92 Navigator.pop(context, true); 93 openAppSettings(); 94 }, 95 child: const Text( 96 "Settings", 97 style: TextStyle( 98 color: CupertinoColors.activeBlue, 99 ), 100 ), 101 ), 102 ], 103 ), 104 ); 105 return isOpened; 106 } 107 108 static Future<String?> uploadProfileImage(String uid, File image) async { 109 final FirebaseStorage storageInstance = FirebaseStorage.instance; 110 final Reference ref = storageInstance.ref().child(uid); 111 112 try { 113 await ref.putFile(image); 114 String downloadUrl = await ref.getDownloadURL(); 115 if (kDebugMode) { 116 print( 117 "Profile image uploaded successfully. Download URL: $downloadUrl"); 118 } 119 return downloadUrl; 120 } catch (e) { 121 if (kDebugMode) { 122 print("Failed to upload profile image: $e"); 123 } 124 return null; 125 } 126 } 127 128 static Future<String> uploadPostImage(String uid, File image) async { 129 final FirebaseStorage storageInstance = FirebaseStorage.instance; 130 final Reference ref = storageInstance.ref().child('post_images').child(uid); 131 await ref.putFile(image); 132 String downloadUrl = await ref.getDownloadURL(); 133 if (kDebugMode) { 134 print("post_image_path: $downloadUrl"); 135 } 136 return downloadUrl; 137 } 138 139 static Future saveImage(File image) async { 140 try {} catch (e) {} 141 } 142} 143
試したこと
現在起きている事象の解決策として、画像の格納先を参照しているコードが同じになっているか、セキュリティルールに間違いなどはないかなどを見ている状況です。現在はさまざまなことを試行錯誤している段階で、プロフィール編集ページで設定した画像の変更がプロフィールアイコンに適用されるというのではなく、投稿されている画像に適用されてしまう事象が発生しており混乱状態です。この場をお借りして有識者の方のお力をお借りしたいです。関連するコードが文字数制限に抵触するので、コメント欄に記載させていただきます。
補足情報(FW/ツールのバージョンなど)
[✓] Flutter (Channel stable, 3.10.5, on macOS 13.4 22F66 darwin-x64,
locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version
32.1.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] VS Code (version 1.79.2)
[✓] Connected device (3 available)
[✓] Network resources
回答1件
あなたの回答
tips
プレビュー