##実装内容
縦で固定したい場合はコードは以下の通りになります。
import 'package:flutter/services.dart';
void main() {
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
runApp(new MyApp());
}
-
flutter/services.dart
を忘れずにインポート - SystemChrome.setPreferredOrientationsメソッドに固定したい画面の向きを引き渡します
- DeviceOrientationはenumで
landscapeLeft
、landscapeRight
、portraitDown
、portraitUp
が定義されています ※詳細はDeviceOrientation enum - services library - Dart API - 今回の場合は縦で固定したいので
portraitUp
とportraitDown
を引き渡しています
実装方法については以上です。
##補足
内部実装について少し触れていきます。
SystemChrome.setPreferredOrientations
の実装は
static Future<Null> setPreferredOrientations(List<DeviceOrientation> orientations) async {
await SystemChannels.platform.invokeMethod(
'SystemChrome.setPreferredOrientations',
_stringify(orientations),
);
}
となっており、SystemChrome.setPreferredOrientations
を呼び出しています。
実際に内部で何をやっているかはengine/PlatformPlugin.java at master · flutter/engineとか見ればわかると思います。Androidで言えば、DeviceOrientationの値ごとに愚直にmActivity.setRequestedOrientation
しているようです。
iOSの場合は、engine/FlutterPlatformPlugin.mm· flutter/engineを見ればわかります。こちらもDeviceOrientationの値ごとにあわせてUIInterfaceOrientationMaskPortrait
などをpostNotificationNameで指定しています。
上記両コードともにCopyright 2016 The Chromium Authors. All rights reserved.
って書いてあるのも興味深かったです。