album: scaling fixes

This commit is contained in:
Thibault Deckers 2020-03-04 15:46:18 +09:00
parent 5fc1510982
commit 0f00846ddf
2 changed files with 12 additions and 3 deletions

View file

@ -93,11 +93,12 @@ class _GridScaleGestureDetectorState extends State<GridScaleGestureDetector> {
// scroll to show the focal point thumbnail at its new position // scroll to show the focal point thumbnail at its new position
final sliverClosure = _renderSliver; final sliverClosure = _renderSliver;
final viewportClosure = _renderViewport; final viewportClosure = _renderViewport;
final index = _metadata.index;
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
final scrollableContext = widget.scrollableKey.currentContext; final scrollableContext = widget.scrollableKey.currentContext;
final gridSize = (scrollableContext.findRenderObject() as RenderBox).size; final gridSize = (scrollableContext.findRenderObject() as RenderBox).size;
final newExtent = gridSize.width / newColumnCount; final newExtent = gridSize.width / newColumnCount;
final row = _metadata.index ~/ newColumnCount; final row = index ~/ newColumnCount;
// `Scrollable.ensureVisible` only works on already rendered objects // `Scrollable.ensureVisible` only works on already rendered objects
// `RenderViewport.showOnScreen` can find any `RenderSliver`, but not always a `RenderMetadata` // `RenderViewport.showOnScreen` can find any `RenderSliver`, but not always a `RenderMetadata`
final scrollOffset = viewportClosure.scrollOffsetOf(sliverClosure, (row + 1) * newExtent - gridSize.height / 2); final scrollOffset = viewportClosure.scrollOffsetOf(sliverClosure, (row + 1) * newExtent - gridSize.height / 2);
@ -127,12 +128,20 @@ class ScaleOverlay extends StatefulWidget {
} }
class _ScaleOverlayState extends State<ScaleOverlay> { class _ScaleOverlayState extends State<ScaleOverlay> {
bool _init = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() => _init = true));
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MediaQueryDataProvider( return MediaQueryDataProvider(
child: IgnorePointer( child: IgnorePointer(
child: AnimatedContainer( child: AnimatedContainer(
color: Colors.black54, color: _init ? Colors.black54 : Colors.transparent,
duration: const Duration(milliseconds: 300), duration: const Duration(milliseconds: 300),
child: ValueListenableBuilder( child: ValueListenableBuilder(
valueListenable: widget.scaledCountNotifier, valueListenable: widget.scaledCountNotifier,

View file

@ -85,7 +85,7 @@ class _ThumbnailOverlay extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final fontSize = min(14.0, (extent / 8).roundToDouble()); final fontSize = min(14.0, (extent / 8));
final iconSize = fontSize * 2; final iconSize = fontSize * 2;
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,