Ich würde ein einfaches Mixin verwenden , um das Telefon im Hochformat zu sperren . Die folgende Lösung sperrt die gesamte App im Hochformat oder setzt bestimmte Bildschirme auf Hochformat, während die Drehung an anderer Stelle beibehalten wird.
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
mixin PortraitModeMixin on StatelessWidget {
@override
Widget build(BuildContext context) {
_portraitModeOnly();
return null;
}
}
mixin PortraitStatefulModeMixin<T extends StatefulWidget> on State<T> {
@override
Widget build(BuildContext context) {
_portraitModeOnly();
return null;
}
@override
void dispose() {
_enableRotation();
}
}
void _portraitModeOnly() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
void _enableRotation() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
Um die Rotation in der gesamten App zu blockieren, implementieren Sie sie PortraitModeMixin
im Haupt- App
Widget. Denken Sie daran, rufen Sie super.build(context)
in Widget build(BuildContext context)
Methode.
class App extends StatelessWidget with PortraitModeMixin {
const App();
@override
Widget build(BuildContext context) {
super.build(context);
return CupertinoApp(
title: 'Flutter Demo',
theme: CupertinoThemeData(),
home: Text("Block screen rotation example"),
);
}
}
Um die Drehung in einem bestimmten Bildschirm zu blockieren, implementieren Sie sie PortraitStatefulModeMixin<SampleScreen>
im Status des jeweiligen Bildschirms. Denken Sie daran, rufen super.build(context)
in die staatlichen build()
Verfahren und super.dispose()
in dispose()
Verfahren. Wenn es sich bei Ihrem Bildschirm um ein StatelessWidget handelt, wiederholen Sie einfach die Lösung der App (vorheriges Beispiel), dh verwenden Sie sie PortraitModeMixin
.
class SampleScreen extends StatefulWidget {
SampleScreen() : super();
@override
State<StatefulWidget> createState() => _SampleScreenState();
}
class _SampleScreenState extends State<SampleScreen>
with PortraitStatefulModeMixin<SampleScreen> {
@override
Widget build(BuildContext context) {
super.build(context);
return Text("Flutter - Block screen rotation example");
}
@override
void dispose() {
super.dispose();
}
}
Mixins mit einer solchen Syntax funktionieren ab Dart 2.1