Make RainRadar reloadable by user

This commit is contained in:
Konstantin Kollar
2022-09-20 23:53:06 +02:00
parent fae4afbc71
commit abea5d23d3
+21 -13
View File
@@ -28,7 +28,6 @@ class _RainRadarState extends State<RainRadar>
controllerValue = controller.value; controllerValue = controller.value;
}); });
}); });
controller.stop();
} }
@override @override
@@ -46,7 +45,6 @@ class _RainRadarState extends State<RainRadar>
_gifBytes = gif.readAsBytesSync(); _gifBytes = gif.readAsBytesSync();
_gifLoaded = true; _gifLoaded = true;
}); });
// controller.animateTo(24, duration: const Duration(seconds: 15));
}); });
} }
@@ -54,17 +52,16 @@ class _RainRadarState extends State<RainRadar>
return Column(children: [ return Column(children: [
Padding( Padding(
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
child: _gifLoaded child: VisibilityDetector(
? VisibilityDetector(
key: const Key('gif-key'), key: const Key('gif-key'),
onVisibilityChanged: (visibilityInfo) { onVisibilityChanged: (visibilityInfo) {
controller.animateTo(24, if (visibilityInfo.visibleFraction > 0) {
duration: const Duration(seconds: 15)); controller.animateTo(24, duration: const Duration(seconds: 15));
}
}, },
child: GifImage( child:
controller: controller, image: MemoryImage(_gifBytes)), GifImage(controller: controller, image: MemoryImage(_gifBytes)),
) )),
: const CircularProgressIndicator()),
Row(mainAxisAlignment: MainAxisAlignment.center, children: [ Row(mainAxisAlignment: MainAxisAlignment.center, children: [
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
@@ -97,16 +94,27 @@ class _RainRadarState extends State<RainRadar>
appBar: AppBar( appBar: AppBar(
title: const Text('Rain Radar'), title: const Text('Rain Radar'),
), ),
body: _gifLoaded body: RefreshIndicator(
onRefresh: (() {
return Future(() {
setState(() {
_gifLoaded = false;
});
loadGif();
});
}),
child: SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
child: _gifLoaded
? _showGif() ? _showGif()
: Column( : Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: const [ children: const [
SizedBox( SizedBox(
height: 50, height: 50,
), ),
Center(child: CircularProgressIndicator()) Center(child: CircularProgressIndicator())
])); ]))));
} }
} }