Skip to content
This repository has been archived by the owner on Jun 25, 2023. It is now read-only.

Memory Leak occurs when using ImageBuilder #26

Closed
violet-dev opened this issue Sep 22, 2020 · 5 comments
Closed

Memory Leak occurs when using ImageBuilder #26

violet-dev opened this issue Sep 22, 2020 · 5 comments
Labels
bug Something isn't working In Progress Work In Progress

Comments

@violet-dev
Copy link

violet-dev commented Sep 22, 2020

  • no cacheExtent, no use imageBuilder
    3333

  • cacheExtent: height * 2, no use imageBuilder
    2222

  • no cacheExtent, use imageBuilder
    4444

  • cacheExtent: height * 2, use imageBuilder
    1111

Thanks for making a nice library!
When I use imageBuilder I get an error where the memory is not released properly.

  List<double> _height = List<double>.filled(999, 0);

  @override
  Widget build(BuildContext context) {
    final width = MediaQuery.of(context).size.height;
    final height = MediaQuery.of(context).size.height;
    return Scaffold(
      body: ListView.builder(
        itemCount: imgs2.length,
        // cacheExtent: height * 2,
        itemBuilder: (context, index) {
          return OptimizedCacheImage(
            imageUrl: imgs2[index],
            fit: BoxFit.cover,
            imageBuilder: (context, imageProvider) {
              Image imageView = Image(
                image: imageProvider,
              );
              if (_height[index] == 0) {
                ImageStream stream =
                    imageView.image.resolve(ImageConfiguration());
                stream.addListener(
                    ImageStreamListener((ImageInfo info, bool synchronousCall) {
                  var myImage = info.image;
                  Size size =
                      Size(myImage.width.toDouble(), myImage.height.toDouble());
                  _height[index] = width / size.aspectRatio;
                }));
              }
              return imageView;
            },
            progressIndicatorBuilder: (context, string, progress) {
              return SizedBox(
                height: 300,
                child: Center(
                  child: SizedBox(
                    child: CircularProgressIndicator(value: progress.progress),
                    width: 30,
                    height: 30,
                  ),
                ),
              );
            },
          );
        },
      ),
    );
  }
[√] Flutter (Channel beta, 1.21.0-9.2.pre, on Microsoft Windows [Version 10.0.18362.1082], locale ko-KR)
    • Flutter version 1.21.0-9.2.pre at C:\Dev\flutter
    • Framework revision 81a45ec2e5 (4 weeks ago), 2020-08-27 14:14:33 -0700
    • Engine revision 20a9531835
    • Dart version 2.10.0 (build 2.10.0-7.3.beta)


[√] Android toolchain - develop for Android devices (Android SDK version 30.0.0) 
    • Android SDK at F:\android-sdk
    • Platform android-30, build-tools 30.0.0
    • ANDROID_HOME = F:\android-sdk
    • Java binary at: F:\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 4.0)
    • Android Studio at F:\Android\Android Studio
    • Flutter plugin version 47.1.2
    • Dart plugin version 193.7361
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] VS Code (version 1.49.1)
    • VS Code at C:\Users\\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.14.1

[√] Connected device (4 available)
    • Android SDK built for x86 (mobile) • emulator-5554 • android-x86    • Android 10 (API 29) (emulator)
    • Web Server (web)                   • web-server    • web-javascript • Flutter Tools
    • Chrome (web)                       • chrome        • web-javascript • Google Chrome 85.0.4183.102
    • Edge (web)                         • edge          • web-javascript • Microsoft Edge 85.0.564.51

• No issues found!

Full source code: https://github.com/violet-dev/ocimmmmmmmmmmmmm/blob/master/lib/main.dart
(images is sensational)

@violet-dev violet-dev changed the title Memory Leak when using ImageBuilder Memory Leak occurs when using ImageBuilder Sep 22, 2020
@violet-dev
Copy link
Author

I fixed it like this temporarily

typedef ImageWidgetBuilder = Widget Function(
    BuildContext context, ImageProvider imageProvider, Widget child);
  Widget _octoImageBuilder(BuildContext context, Widget child) {
    return imageBuilder(context, _image, child);
  }
           imageBuilder: (context, imageProvider, child) {
              try {
                final RenderBox renderBoxRed =
                    _keys[index].currentContext.findRenderObject();
                final sizeRender = renderBoxRed.size;
                if (sizeRender.height != 300)
                  _height[index] = width / sizeRender.aspectRatio;
              } catch (e) {}
              return child;
            },

@humblerookie
Copy link
Owner

Thanks, @violet-dev for raising this, I'll investigate this.

@humblerookie humblerookie added bug Something isn't working In Progress Work In Progress labels Mar 8, 2021
@humblerookie
Copy link
Owner

Could you check this in the latest release? 2.0.0

@violet-dev
Copy link
Author

@humblerookie
Thank you! I'll try that

@humblerookie
Copy link
Owner

Hi @violet-dev, closing this for now, Feel free to reopen if you face any issues.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working In Progress Work In Progress
Projects
None yet
Development

No branches or pull requests

2 participants