Изменение размера изображения в реальном устройстве на флаттер / дротик заняло> 10 минут - PullRequest
0 голосов
/ 05 июня 2018

Я обнаружил поведение с Флаттером / Дартсом.Я пытаюсь изменить размер изображения из ImagePicker.Симулятор работает хорошо, но на реальном устройстве, iPhone 6 плюс, весь процесс занял более 10 минут и завершился сбоем.

На реальном устройстве я нажал кнопку, которая выдает изображениеПикер, я выбираю фото и устройство просто зависло.Через 10 минут Image Pciker отклоняет и продолжает изменять размер изображения, а через 5 минут или около того происходит сбой.

Вот код:

ImagePicker.pickImage(source: source)
      .then((_imageFile2) => _uploadFile(_imageFile2)
      .then((downbloadURL) {
          if (downbloadURL != null ) {

              createCloudStoreRecord(fireBaseUser, downbloadURL, true);

              setState(() {
                  profileImage = new DecorationImage(
                  image: getProfileImage(downbloadURL), 
                  fit: BoxFit.cover,
                  );

              });
            Navigator.pop(context);
            showInSnackBar("Image Updated");
          } else {
            Navigator.pop(context);
            showInSnackBar("Image Update Error!");
          }
      }));


Future<String> _uploadFile(_imageFile2) async {
    print("in upload image");

    if (_imageFile2==null) {
        print("imagePicker image is null");
        Navigator.pop(context);
        return null;
    } else {
        onLoading(context, "Updating ...");

        try {
          // resize image
          Im.Image image = Im.decodeImage(_imageFile2.readAsBytesSync());
          Im.Image smallerImage = Im.copyResize(image, 500); // choose the size here, it will maintain aspect ratio
          final tempDir = await getTemporaryDirectory();
          final path = tempDir.path;
          var filename = user.uid.toString() + ".png";
          var newPath = '$path/' + filename;
          print("start compressed");
          var compressedImage = new File(newPath)..writeAsBytesSync(Im.encodePng(smallerImage));
          print("end compressed");
          //final Directory systemTempDir = Directory.systemTemp;
          final StorageReference ref = FirebaseStorage.instance.ref().child('users/' + filename);
          final StorageUploadTask uploadTask = ref.putFile(
            compressedImage,
            new StorageMetadata(
              contentLanguage: 'en',
              customMetadata: <String, String>{'renalbase': 'user_photo'},
            ),
          );
          print("Start upload");
          UploadTaskSnapshot uploadSnapshot = await uploadTask.future;

          print("image uploaded");

          Map<String, dynamic> pictureData = new Map<String, dynamic>();
          pictureData["url"] = uploadSnapshot.downloadUrl.toString();
          print("Bfore url = ${pictureData["url"]}");
          final RegExp regExp = RegExp('.*(?=\\?)');
          pictureData["url"] = Uri.decodeFull( regExp.stringMatch(pictureData["url"]) );
          print("url = ${pictureData["url"]}");
          return pictureData["url"];
        } catch(e) {
            print("Upload error: $e");
            showInSnackBar("Upload error: $e");
            return null;
          }
      }

  }

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

У меня были похожие проблемы с изменением размера изображения, которое заняло слишком много времени.Я переключился на использование параметров maxHeight и maxWidth в ImagePicker.pickImage и получил гораздо лучшие результаты.

_imageFile = await ImagePicker.pickImage(
          source: ImageSource.gallery, 
          maxHeight: 450.0, 
          maxWidth: 450.0);
0 голосов
/ 22 июня 2018

Отказался от плагина изображения и использовал вместо него flutter_native_image.(https://github.com/btastic/flutter_native_image)

Работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...