gallery_picker/lib/user_widgets/photo_provider.dart

60 lines
1.2 KiB
Dart
Raw Normal View History

2022-12-29 08:45:28 +03:00
import 'package:flutter/material.dart';
import '../models/media_file.dart';
class PhotoProvider extends StatefulWidget {
final MediaFile media;
final BoxFit fit;
final double? width, height;
const PhotoProvider({
super.key,
required this.media,
this.fit = BoxFit.contain,
this.width,
this.height,
});
@override
2022-12-30 05:18:18 +03:00
State<PhotoProvider> createState() => _PhotoProviderState();
2022-12-29 08:45:28 +03:00
}
class _PhotoProviderState extends State<PhotoProvider> {
2022-12-30 05:18:18 +03:00
late MediaFile _media;
2022-12-29 08:45:28 +03:00
@override
void initState() {
2022-12-30 05:18:18 +03:00
_media = widget.media;
2022-12-29 08:45:28 +03:00
WidgetsBinding.instance.addPostFrameCallback((_) {
initMedia();
});
super.initState();
}
Future<void> initMedia() async {
2022-12-30 05:18:18 +03:00
await _media.getData();
2022-12-29 08:45:28 +03:00
if (mounted) {
setState(() {});
}
}
@override
Widget build(BuildContext context) {
2022-12-30 05:18:18 +03:00
if (_media != widget.media) {
_media = widget.media;
if (_media.data == null) {
2022-12-29 08:45:28 +03:00
initMedia();
}
}
2022-12-30 05:18:18 +03:00
return _media.data == null
? SizedBox(
2022-12-29 08:45:28 +03:00
width: widget.width,
height: widget.height,
)
: Image.memory(
2022-12-30 05:18:18 +03:00
_media.data!,
2022-12-29 08:45:28 +03:00
width: widget.width,
height: widget.height,
fit: widget.fit,
);
}
}