blob: ac9a3f2412c52b7d720d631e0f3986e1b881d3e4 [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() => new _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) => new MediaQuery(
data: new MediaQueryData.fromWindow(ui.window),
child: widget.child,
);
@override
void didChangeMetrics() => setState(() {
widget.onWindowMetricsChanged?.call();
});
}