measureAutoFitLayouts function
Future<List<Size> >
measureAutoFitLayouts(
- BuildContext context,
- List<
SwayzeAutoFitMeasurementRequest> requests
Implementation
Future<List<Size>> measureAutoFitLayouts(BuildContext context, List<SwayzeAutoFitMeasurementRequest> requests) async {
if (requests.isEmpty) {
return const [];
}
final overlay = Overlay.maybeOf(context, rootOverlay: true);
if (overlay == null) {
return List<Size>.filled(requests.length, Size.zero);
}
final keys = List.generate(requests.length, (_) => GlobalKey());
final textDirection = Directionality.of(context);
final mediaQuery = MediaQuery.maybeOf(context);
late final OverlayEntry overlayEntry;
overlayEntry = OverlayEntry(
builder: (_) {
Widget child = _SwayzeAutoFitMeasurementHost(requests: requests, keys: keys);
child = Directionality(textDirection: textDirection, child: child);
if (mediaQuery != null) {
child = MediaQuery(data: mediaQuery, child: child);
}
return IgnorePointer(child: InheritedTheme.captureAll(context, child));
},
);
overlay.insert(overlayEntry);
await WidgetsBinding.instance.endOfFrame;
final sizes = [for (final key in keys) ((key.currentContext?.findRenderObject()) as RenderBox?)?.size ?? Size.zero];
overlayEntry.remove();
return sizes;
}