didChangeMetrics method
- @override
override
Called when the application's dimensions change. For example, when a phone is rotated.
This method exposes notifications from Window.onMetricsChanged.
This StatefulWidget implements the parts of the State and
WidgetsBindingObserver protocols necessary to react when the device is
rotated (or otherwise changes dimensions).
class MetricsReactor extends StatefulWidget {
const MetricsReactor({ Key key }) : super(key: key);
@override
_MetricsReactorState createState() => _MetricsReactorState();
}
class _MetricsReactorState extends State<MetricsReactor> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
Size _lastSize;
@override
void didChangeMetrics() {
setState(() { _lastSize = ui.window.physicalSize; });
}
@override
Widget build(BuildContext context) {
return Text('Current size: $_lastSize');
}
}
In general, this is unnecessary as the layout system takes care of automatically recomputing the application geometry when the application size changes.
See also:
- MediaQuery.of, which provides a similar service with less boilerplate.
Implementation
@override
void didChangeMetrics() {
if (_lastBottomViewInset < ui.window.viewInsets.bottom) {
_showCaretOnScreen();
}
_lastBottomViewInset = ui.window.viewInsets.bottom;
}