11import 'dart:io' ;
22import 'dart:math' ;
3-
43import 'package:blurhash_ffi/blurhash_ffi.dart' ;
54import 'package:flutter/material.dart' ;
5+ import 'package:interstellar/src/controller/controller.dart' ;
66import 'package:interstellar/src/models/image.dart' ;
77import 'package:interstellar/src/utils/share.dart' ;
88import 'package:interstellar/src/utils/utils.dart' ;
@@ -11,6 +11,8 @@ import 'package:interstellar/src/widgets/loading_button.dart';
1111import 'package:interstellar/src/widgets/wrapper.dart' ;
1212import 'package:interstellar/src/widgets/super_hero.dart' ;
1313import 'package:material_symbols_icons/symbols.dart' ;
14+ import 'package:extended_image/extended_image.dart' ;
15+ import 'package:provider/provider.dart' ;
1416
1517class AdvancedImage extends StatelessWidget {
1618 final ImageModel image;
@@ -34,11 +36,11 @@ class AdvancedImage extends StatelessWidget {
3436 ? null
3537 : sqrt (1080 / (image.blurHashWidth! * image.blurHashHeight! ));
3638
37- return SuperHero (
38- tag : image. toString () + (hero ?? '' ) ,
39- child : Wrapper (
40- shouldWrap : openTitle != null ,
41- parentBuilder : ( child) => GestureDetector (
39+ return Wrapper (
40+ shouldWrap : openTitle != null ,
41+ parentBuilder : (child) => SuperHero (
42+ tag : image. toString () + (hero ?? '' ) ,
43+ child: GestureDetector (
4244 onTap: () => pushRoute (
4345 context,
4446 builder: (context) => AdvancedImagePage (
@@ -50,30 +52,51 @@ class AdvancedImage extends StatelessWidget {
5052 ),
5153 child: child,
5254 ),
53- child: Wrapper (
54- shouldWrap: enableBlur,
55- parentBuilder: (child) => Blur (child),
56- child: Stack (
57- alignment: Alignment .center,
58- fit: StackFit .passthrough,
59- children: [
60- if (image.blurHash != null )
61- Image (
62- fit: fit,
63- image: BlurhashFfiImage (
64- image.blurHash! ,
65- decodingWidth: (blurHashSizeFactor! * image.blurHashWidth! )
66- .ceil (),
67- decodingHeight: (blurHashSizeFactor * image.blurHashHeight! )
68- .ceil (),
69- scale: blurHashSizeFactor,
70- ),
71- ),
72- Image .network (image.src, fit: fit),
73- ],
74- ),
55+ ),
56+ child: Wrapper (
57+ shouldWrap: enableBlur,
58+ parentBuilder: (child) => Blur (child),
59+ child: Stack (
60+ alignment: Alignment .center,
61+ fit: StackFit .passthrough,
62+ children: [
63+ ExtendedImage .network (
64+ image.src,
65+ fit: fit,
66+ enableSlideOutPage: true ,
67+ heroBuilderForSlidingPage: (child) {
68+ return SuperHero (
69+ tag: image.toString () + (hero ?? '' ),
70+ child: child,
71+ );
72+ },
73+ cache: true ,
74+ mode: ExtendedImageMode .gesture,
75+ loadStateChanged: (state) {
76+ if (state.extendedImageLoadState == LoadState .loading &&
77+ image.blurHash != null ) {
78+ return ExtendedImage (
79+ fit: fit,
80+ image: BlurhashFfiImage (
81+ image.blurHash! ,
82+ decodingWidth:
83+ (blurHashSizeFactor! * image.blurHashWidth! ).ceil (),
84+ decodingHeight:
85+ (blurHashSizeFactor * image.blurHashHeight! ).ceil (),
86+ scale: blurHashSizeFactor,
87+ ),
88+ enableSlideOutPage: true ,
89+ );
90+ } else if (state.extendedImageLoadState == LoadState .failed) {
91+ context.read <AppController >().logger.w ('Image failed to load: ${image .src }' );
92+ }
93+ return null ;
94+ },
95+ ),
96+ ],
7597 ),
7698 ),
99+ // ),
77100 );
78101 }
79102}
@@ -97,6 +120,11 @@ class AdvancedImagePage extends StatefulWidget {
97120}
98121
99122class _AdvancedImagePageState extends State <AdvancedImagePage > {
123+ @override
124+ void initState () {
125+ super .initState ();
126+ }
127+
100128 @override
101129 Widget build (BuildContext context) {
102130 const shadows = < Shadow > [
@@ -136,14 +164,13 @@ class _AdvancedImagePageState extends State<AdvancedImagePage> {
136164 body: Stack (
137165 children: [
138166 Positioned .fill (
139- child: InteractiveViewer (
167+ child: ExtendedImageSlidePage (
168+ slideAxis: SlideAxis .both,
140169 child: SafeArea (
141- child: Center (
142- child: AdvancedImage (
143- widget.image,
144- hero: widget.hero,
145- fit: widget.fit,
146- ),
170+ child: AdvancedImage (
171+ widget.image,
172+ hero: widget.hero,
173+ // fit: widget.fit,
147174 ),
148175 ),
149176 ),
0 commit comments