[Flutter]GlobalKey()を説明してみる

はじめに

コードを見てると、下記の様なコードを見ました。

import 'package:flutter/material.dart';

class NavigationController {
  final GlobalKey<NavigatorState> _navigatorKey = GlobalKey<NavigatorState>();

  GlobalKey<NavigatorState> get navigatorKey => _navigatorKey;
}

ちょっと前にゲッターについて学習したのでゲッターの部分については理解できました。

ゲッターについて簡単に説明

簡単に説明すると、_navigatorKeyはとても大切なプロパティなので変えることができないように、参照するだけに留めている仕組みのことをゲッターって言うんでしたね。

GlobalKeyは大切な値

と言うことは、_navigatorKeyに格納している、 GlobalKey<NavigatorState>();は、とても大切な値ということですね。

ということで、調べてみました。

GlobalKey<NavigatorState>();とは

一言で言うと

GlobalKey の新しいインスタンスを生成しています。
GlobalKey<NavigatorState>
は、Flutterアプリケーション内でナビゲーション(画面遷移)を管理するための特別なキーです。このキーは、アプリ内で、ページをプッシュしたり(移動したり)、ポップしたり(戻ったり)するために使用されます。

具体的に言うと

  • GlobalKey は、Flutterのウィジェットツリー内で一意である必要があるグローバルなキーを生成するための特別なクラスです。ウィジェットツリー内で一意であるため、異なるウィジェットから同じキーを参照できます。

  • <NavigatorState> はジェネリクスの一部で、GlobalKey にどの型のオブジェクトを保持するかを指定するために使用されます。この場合、NavigatorState クラスのインスタンスを保持するために <NavigatorState> と指定しています。

雑談:ジェネリクスとは

ジェネリクス(Generics)は、プログラミング言語の機能の一つで、コードの再利用性と型安全性を向上させるために使われます。ジェネリクスは、特定のデータ型を指定せず、汎用的なコードを記述できるようにする仕組みです。
GlobalKey<NavigatorState>意外に下記の型があります。

GlobalKey<FormState>();
GlobalKey<ScaffoldState>();
GlobalKey<PageStorageKey>();

print(navigatorKey) を実行してみた

下記のログが返ってきました。

[LabeledGlobalKey<NavigatorState>#fac3f]

LabeledGlobalKey とは

LabeledGlobalKey は、GlobalKey のサブクラスで、GlobalKey の識別のためにラベルを提供します。
fac3f はラベルの一部で、一意性を確保するためにランダムな値が生成されます。
確かに、ビルドしなおすとfac3fという部分が毎回変わりました。

結論

GlobalKey<NavigatorState> はFlutterアプリケーション内でナビゲーションを管理するための重要なキーであり、ジェネリクスを使用して特定の型である NavigatorState オブジェクトを識別し操作します。
また、LabeledGlobalKey は識別のためにラベルを提供し、キーの一意性を確保します。
これらのキーは、アプリ内で画面遷移やナビゲーションを制御するために不可欠な役割を果たします。


この記事が気に入ったらサポートをしてみませんか?