53 lines
1.7 KiB
Dart
53 lines
1.7 KiB
Dart
import 'package:aves/widgets/common/fx/checkered_decoration.dart';
|
|
import 'package:aves/widgets/viewer/visual/entry_page_view.dart';
|
|
import 'package:aves/widgets/viewer/visual/state.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class VectorViewCheckeredBackground extends StatelessWidget {
|
|
final Size displaySize;
|
|
final ValueNotifier<ViewState> viewStateNotifier;
|
|
final Widget child;
|
|
|
|
const VectorViewCheckeredBackground({
|
|
@required this.displaySize,
|
|
@required this.viewStateNotifier,
|
|
@required this.child,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return ValueListenableBuilder<ViewState>(
|
|
valueListenable: viewStateNotifier,
|
|
builder: (context, viewState, child) {
|
|
final viewportSize = viewState.viewportSize;
|
|
if (viewportSize == null) return child;
|
|
|
|
final side = viewportSize.shortestSide;
|
|
final checkSize = side / ((side / EntryPageView.decorationCheckSize).round());
|
|
|
|
final viewSize = displaySize * viewState.scale;
|
|
final decorationSize = applyBoxFit(BoxFit.none, viewSize, viewportSize).source;
|
|
final offset = ((decorationSize - viewportSize) as Offset) / 2;
|
|
|
|
return Stack(
|
|
alignment: Alignment.center,
|
|
children: [
|
|
Positioned(
|
|
width: decorationSize.width,
|
|
height: decorationSize.height,
|
|
child: DecoratedBox(
|
|
decoration: CheckeredDecoration(
|
|
checkSize: checkSize,
|
|
offset: offset,
|
|
),
|
|
),
|
|
),
|
|
child,
|
|
],
|
|
);
|
|
},
|
|
child: child,
|
|
);
|
|
}
|
|
}
|