Flutter - средство выбора изображений не работает после установки на реальном устройстве

Мой инструмент выбора изображений работает нормально в эмуляторе 7 в режиме отладки на моем реальном устройстве, но не работает после экспорта приложения на моем реальном устройстве.

Я использую этот плагин

В чем проблема, смотрите в этом видео: Видео на Google Диске: < / а>

В отладке, где все работает нормально:

видео на диске Google, так как вы можете видеть все, отлично работает в режиме отладки

Это моя функция выбора изображений

 File userAvatar;
 File get getUserAvatar => userAvatar;
 Future pickUserAvatar(BuildContext context, ImageSource source) async {
    final pickedUserAvatar = await picker.getImage(source: source);
    BotToast.showText(text: 'my picked name is $source');
    pickedUserAvatar == null
        ? BotToast.showText(text: 'Select Image')
        : userAvatar = File(pickedUserAvatar.path);

    userAvatar != null
        ? Provider.of<LandingService>(context, listen: false)
            .showUserAvatar(context)
        : BotToast.showText(text: 'Image Upload Error');

    notifyListeners();
  }

Это мой пользователь шоу Аватар Функция Где я показываю после изображения Успешно выбрано

  showUserAvatar(BuildContext context) {
    return showModalBottomSheet(
        context: context,
        builder: (context) {
          return Container(
            height: MediaQuery.of(context).size.height * 0.45,
            width: MediaQuery.of(context).size.width,
            child: SingleChildScrollView(
              child: Column(
                children: [
                  Padding(
                    padding: EdgeInsets.symmetric(horizontal: 150.0),
                    child: Divider(
                      thickness: 4.0,
                      color: constantColors.whiteColor,
                    ),
                  ),
                  CircleAvatar(
                    radius: 80.0,
                    backgroundColor: constantColors.transperant,
                    backgroundImage: FileImage(
                      Provider.of<LandingUtils>(context, listen: false)
                          .userAvatar,
                    ),
                  ),
                  Container(
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        MaterialButton(
                          child: Text(
                            'Reselect',
                            style: TextStyle(
                              color: constantColors.whiteColor,
                              fontWeight: FontWeight.bold,
                              decoration: TextDecoration.underline,
                              decorationColor: constantColors.whiteColor,
                            ),
                          ),
                          onPressed: () {
                            Provider.of<LandingUtils>(context, listen: false)
                                .pickUserAvatar(context, ImageSource.gallery);
                          },
                        ),
                        MaterialButton(
                          color: constantColors.blueColor,
                          child: Text(
                            'Confirm Image',
                            style: TextStyle(
                              color: constantColors.whiteColor,
                              fontWeight: FontWeight.bold,
                            ),
                          ),
                          onPressed: () {
                            Provider.of<FirebasessOperations>(context,
                                    listen: false)
                                .uploadUserAvatar(context)
                                .whenComplete(() => {
                                      signUpSheet(context),
                                    });
                          },
                        )
                      ],
                    ),
                  )
                ],
              ),
            ),
            decoration: BoxDecoration(
              color: constantColors.blueGreyColor,
              borderRadius: BorderRadius.circular(15.0),
            ),
          );
        });
  }

Я также добавляю эту строку в свой манифест Android

android:requestLegacyExternalStorage="true"

person Radiant Developers    schedule 13.03.2021    source источник


Ответы (2)


проблема в том, что ваша версия сборки Gradle перейдите в android / build.grale

classpath 'com.android.tools.build:gradle:3.5.4'

надеюсь, что это работает,

person Ali Azimoshan    schedule 13.03.2021
comment
Спасибо, все работает, подскажите, почему возникла эта проблема? - person Radiant Developers; 13.03.2021
comment
не уверен, почему это произошло, но некоторые официальные плагины не работают с classpath 'com.android.tools.build:gradle:4.1.0' , и это изменение необходимо для выпуска. - person Ali Azimoshan; 13.03.2021

вам необходимо сначала проверить и предоставить разрешение пользователя перед выполнением функции выбора фотографий, пожалуйста, взгляните на этот плагин: https://pub.dev/packages/permission_handler:

// request a user for permission first 
Map<Permission, PermissionStatus> statuses = await [
  Permission.storage,
  Permission.camera,
].request();

 if (await Permission.storage.request().isGranted) {
   // Either the permission was already granted before or the user just granted it you 
   can now select photo.
 }
person amgad gamal    schedule 13.03.2021