65 lines
1.7 KiB
Dart
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);
|
|
}
|
|
}
|