17
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Flutterでアプリの向きを固定する方法とFlutterでの実装をみてみる

Last updated at Posted at 2018-05-02

##実装内容

縦で固定したい場合はコードは以下の通りになります。

import 'package:flutter/services.dart';

void main() {
  SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

  runApp(new MyApp());
}
  1. flutter/services.dartを忘れずにインポート
  2. SystemChrome.setPreferredOrientationsメソッドに固定したい画面の向きを引き渡します
  3. DeviceOrientationはenumでlandscapeLeftlandscapeRightportraitDownportraitUpが定義されています ※詳細はDeviceOrientation enum - services library - Dart API
  4. 今回の場合は縦で固定したいのでportraitUpportraitDownを引き渡しています

実装方法については以上です。

##補足
内部実装について少し触れていきます。

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.って書いてあるのも興味深かったです。

17
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?