Example #1
0
        public static Future precacheImage(
            ImageProvider provider,
            BuildContext context,
            Size size = null,
            ImageErrorListener onError = null
            )
        {
            var config    = createLocalImageConfiguration(context: context, size: size);
            var completer = Completer.create();
            var stream    = provider.resolve(configuration: config);
            ImageStreamListener listener = null;

            listener = new ImageStreamListener(
                (image, sync) => {
                if (!completer.isCompleted)
                {
                    completer.complete();
                }

                SchedulerBinding.instance.addPostFrameCallback(timeStamp => {
                    stream.removeListener(listener: listener);
                });
            },
                onError: error => {
                if (!completer.isCompleted)
                {
                    completer.complete();
                }

                stream.removeListener(listener: listener);
                UIWidgetsError.reportError(new UIWidgetsErrorDetails(
                                               context: new ErrorDescription("image failed to precache"),
                                               library: "image resource service",
                                               silent: true));
            }
                );
            stream.addListener(listener: listener);
            return(completer.future);
        }
        //TODO add capture type (camera, video, image)
        //TODO add auto-loop option

        public ImageStream(ImageStreamListener streamListener)
        {
            this.listener = streamListener;
        }