ente/lib/ui/thumbnail_widget.dart
Vishnu Mohandas 610a5feb17 Rename widget
2020-04-25 14:42:13 +05:30

65 lines
1.7 KiB
Dart

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:myapp/core/thumbnail_cache.dart';
import 'package:myapp/models/photo.dart';
import 'package:photo_manager/photo_manager.dart';
class ThumbnailWidget extends StatefulWidget {
final Photo photo;
final int size;
const ThumbnailWidget(
this.photo, {
Key key,
this.size,
}) : super(key: key);
@override
_ThumbnailWidgetState createState() => _ThumbnailWidgetState();
}
class _ThumbnailWidgetState extends State<ThumbnailWidget> {
static final Widget loadingWidget = Container(
alignment: Alignment.center,
color: Colors.grey[500],
);
@override
Widget build(BuildContext context) {
final size = widget.size == null ? 512 : widget.size;
final cachedImageData = ThumbnailLruCache.get(widget.photo);
Widget image;
if (cachedImageData != null) {
image = _buildImage(cachedImageData, size);
} else {
if (widget.photo.localId != null) {
image = FutureBuilder<Uint8List>(
future: AssetEntity(id: widget.photo.localId)
.thumbDataWithSize(size, size),
builder: (context, snapshot) {
if (snapshot.hasData) {
ThumbnailLruCache.put(widget.photo, snapshot.data);
Image image = _buildImage(snapshot.data, size);
return image;
} else {
return loadingWidget;
}
},
);
} else {
// TODO
return Text("Not Implemented");
}
}
return image;
}
Image _buildImage(Uint8List data, int size) {
return Image.memory(data,
width: size.toDouble(), height: size.toDouble(), fit: BoxFit.cover);
}
}