LoginSignup
3
0

More than 5 years have passed since last update.

Flutterでトップレベル変数が初期化されるタイミング

Last updated at Posted at 2018-12-28

Dartではファイルの下にいきなり変数を置くことができる(トップレベル変数)。

some_file.dart
final channel = const MethodChannel('xxx');

さて、このように書いた時、いったいいつconst MethodChannel('xxx');が呼ばれるのでしょうか?

答えはこの変数に初めてアクセスしたときです。

なので、たとえば以下のように書いていたとしても、channel変数自体にアクセスするコードがどこにもなかったらsetMethodCallHandlerの中身は実行されません。

some_file.dart
final channel = const MethodChannel('xxx')
  ..setMethodCallHandler((methodCall) {
    // ...
  });

void main() {
  runApp(MyApp());
}

ちゃんと明示的にどこかでchannelにアクセスするロジックになるようにしましょう。例えばこんな感じ。

some_file.dart
final channel = const MethodChannel('xxx');

void main() {
  channel.setMethodCallHandler((methodCall) {
    // ...
  });

  runApp(MyApp());
}

JavaScriptみたいにまずファイル全体が処理される、みたいなイメージでいると思わぬ落とし穴になりますね。

3
0
2

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
3
0