blob: efa36ce466200fa82e7982b5494c5a409fa32581 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:ui' as ui;
import 'package:flutter/widgets.dart';
/// Uses [ui.window] to create a [MediaQuery] parent for [child].
class WindowMediaQuery extends StatefulWidget {
/// Called when the window metrics change.
final VoidCallback onWindowMetricsChanged;
/// The [Widget] to be given a [MediaQuery] parent.
final Widget child;
/// Constructor.
const WindowMediaQuery({this.onWindowMetricsChanged, this.child});
@override
_WindowMediaQueryState createState() => _WindowMediaQueryState();
}
class _WindowMediaQueryState extends State<WindowMediaQuery>
with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) => MediaQuery(
data: MediaQueryData.fromWindow(ui.window),
child: widget.child,
);
@override
void didChangeMetrics() => setState(() {
widget.onWindowMetricsChanged?.call();
});
}