Мой вопрос заключается в том, как просмотреть изображение перед его загрузкой в firebase в flutter? (image_picker_package)(поставщик)

# #firebase #flutter #dart #flutter-provider

Вопрос:

В файле Dart Службы хранения firebase:

 //storage reference
Future<String> uploadUserImage(File? image, String path) async {
String imageUrl;
Reference ref =
    _firebaseStorage.ref().child('userImages').child('$path.jpg');
await ref.putFile(image!);
imageUrl = await ref.getDownloadURL();
return imageUrl;
}
 

В файле Dart поставщика пользователей(Управление состоянием) с помощью средства определения изменений:

 //getter
void changeImageUrl(String imageUrl) {
_imageUrl = imageUrl;
notifyListeners();
}

//method
uploadPhotoToFirebase(File fileImage) async {
//used firebase user uid for path and File fileImage for File
try {
  var imageUrl = await _storageService.uploadUserImage(fileImage, _userUid);
  
  //assign downloadedUrl to getter
  changeImageUrl(imageUrl);
 } on PlatformException catch (e) {
   print('Failed to pick image: $e');
 }
}
 

Экран профиля пользователя(пользовательский интерфейс):

 //method for Image_picker
Future _pickPhotos(ImageSource imageSource) async {
final userProvider = Provider.of<UserProvider>(context, listen: false);
try {
  final image = (await _picker.pickImage(source: imageSource));
  if (image == null) return;

  final imageTem = File(image.path);
  
  //assigning File(String path) to firebase storage
  await userProvider.uploadPhotoToFirebase(imageTem);
 } on PlatformException catch (e) {
  print('Failed to pick image: $e');
 }
}
   
   //Inside the build
   Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            CircleAvatar(
                backgroundColor: darkGrey,
                radius: 54.0,
                //assign private String _imageUrl 
                child: _imageUrl != null
                    ? ClipRRect(
                        borderRadius: BorderRadius.circular(50.0),
                        child: Image.network(
                          _imageUrl!,
                          width: 100,
                          height: 200,
                          fit: BoxFit.cover,
                        ),
                      )
                    : Center(
                        child: Icon(Icons.person_rounded,
                            color: appColor, size: 80.0))),
            TextButton(
                style: ButtonStyle(
                    overlayColor: MaterialStateColor.resolveWith(
                        (states) => Colors.transparent)),
                child: EditPhotoText(),
                onPressed: () {
                  _pickPhotos(ImageSource.gallery);
                  /* Expecting this to change the local state to show
                     image preview but doesn't work. 
                  */  
                  userProvider.changeImageUrl(_imageUrl!);
                }),
 

Изображение хранится в firebase, и извлечение изображения тоже работает. Я не могу понять, как просмотреть изображение перед его загрузкой в firebase. Я думаю, что мне нужно использовать заданное состояние для локального просмотра, но я не знаю, как или есть ли способ сделать это с помощью пакета поставщика?

Комментарии:

1. Если я создам образ файла var и использую set state (){ this.image = imageTem}, а в сборке я передал изображение вместо _imageUrl. Я могу видеть предварительный просмотр, но когда вы переходите на экран редактирования, изображения нет.

2. я думаю, что случай переключения может исправить это, но я не знаю, как применить его к этому коду.