メインコンテンツへスキップ
  1. Posts/

【flutter】他クラスの関数/変数を使う方法をわかりやすく解説

loading · loading ·

flutterで他クラスの関数や変数を使う方法を探している方向け。

開発を進める上で他クラスから値をインポートして使うことは頻繁にあると思います。

どのように他クラス内のデータにアクセスするのか、検証したソースコードでわかりやすく解説したいと思います。

この記事は以下のような方を対象者としています。

  • flutter初学者の方
  • flutterで別クラスの変数/関数の参照のやり方が分からない方

前置き:別クラス参照で重要となるのはインスタンス化
#

Alt text

前提としてflutterで開発を進めるためにはクラスやオブジェクト、インスタンスといった概念を理解する必要があります。(意味は後述します)

この記事ではflutterで他クラスの変数や関数を使うために知る必要があることのみフォーカスして解説します。

flutterで他クラスの変数/関数を使う方法ステップ1:ファイルのインポートをする
#

他クラスで定義した関数や変数を使いたい場合はインポートを行う必要があります。

インポートはよくファイルの最初に書かれているこの文言です。

import 'package:flutter/material.dart';
import 'package:testFlutter/funcA.dart';

class XXX {

}

命名規則は下記の通りです。

package:パッケージ名/他クラスのファイル名

※インポートのファイルパスは.packagesに定義されています。

ちなみに自分でimport…と書かなくても他クラスの変数名や関数名をIDEが自動でインポートしてくれます。

flutterで他クラスの変数/関数を使う方法ステップ2:アクセススコープを確認する
#

Alt text

これがこの記事の一番重要なパートです。

アクセススコープとは他クラスからどの変数や関数までアクセスが可能なのかを決める領域のことです。

こちらの画像の淡い青色の部分がクラス外、濃い色の部分がクラス内を表しています。

クラス外に定義されているKEY_NAMEという変数、およびsubtractCalc関数はグローバル変数/関数と呼ばれます。

これらはインスタンス化が不要で他クラスから直接使うことができます。

一方クラス内に定義されている変数/関数はメンバ変数/関数と呼ばれます。

これらは呼び出し先にてインスタンス化しないと使えません。

flutterで他クラスの変数/関数を使う方法ステップ3:インスタンス化する
#

インスタンス化とはクラスを実体化(オブジェクト化)してクラス内部の変数/関数に参照できるようにすることです。

具体的にコードを使って説明します。

一つはmain.dart(呼び出し先)、もう一つはshopData.dart(呼び出し元)です。

import 'package:flutter/material.dart';
import 'package:testFlutter/funcA.dart';

class MyHomePageState extends State<MyHomePage> {

    // アクセス可能
    print(SHOP_NAME);
    print(subtractCalc(2));

    // Undefined nameエラーが発生する
    print(multipleCalc(2));
    print(shop_id);
    print(shop_name);
    
}
const SHOP_NAME = "MoonBucks";

class ShopData {
  String shop_name = "nishi-shinjuku";
  int shop_id = 1;

  int multipleCalc(val1) {
    return val1 * val1;
  }
}

int subtractCalc(int arg1, int arg2) {
  return arg1 - arg2;
}

これはmain.dartから別クラスであるshopData.dart内の変数/関数にアクセスしようとしています。

shopDataクラス外はグローバルスコープ(外部から参照可能)のため、インスタンス化無しで参照できます。

しかしshopDataクラス内で定義されているmultipleCalc関数,shop_id, shop_nameはインスタンス化せずにアクセスしようとしているためエラーになります。

このエラーを解消するためにはshopDataクラスをインスタンス化する必要があります。

import 'package:flutter/material.dart';
import 'package:testFlutter/funcA.dart';

class MyHomePageState extends State<MyHomePage> {

    // 下記でインスタンス化(実体化)する
    ShopData shopData = ShopData();

    // アクセス可能
    print(SHOP_NAME);
    print(subtractCalc(2));

    // インスタンスから変数/関数にアクセスするためUndefinedエラーは解消される
    print(shopData.multipleCalc(2));
    print(shopData.shop_id);
    print(shopData.shop_name);
    
}

これでエラーが解消され正常に他クラス内部の変数/関数を参照できるようになりました。

flutterで他クラスの変数/関数を使う方法:まとめ
#

今回の記事を要約すると下記の通りです。

  • インスタンス化とは他クラスを実体化することでクラス内部のオブジェクトにアクセスできるようにすること
  • クラス外部のオブジェクト(グローバル変数や関数)はインスタンス化無しでアクセス可能
  • クラス内部のオブジェクト(メンバ変数や関数)はインスタンス化しないとアクセスできない

さいごに
#

ここまでお読みいただきありがとうございました。

私のブログ記事を読んでいる方の中には海外転職・海外移住への興味がある方もいらっしゃるかと思います。

私自身ダナンで働き始めて7年目になりますが、海外就職を実現するために大事なのは英語力と開発現場で働いた経験だと感じました。

もし今後海外移住・海外就職を本気で実現させたい方はぜひこれらのサービスを活用してみてください。

レアジョブ - 実務で使える英語力を身につけよう
#

レアジョブ英会話は英会話力の向上に特化したサービスです。 私の友人もレアジョブを通じて0から学習を続け、現在はベトナム人のエンジニアとも英語でコミュニケーションが取れるレベルまで英会話力を伸ばすことができました。

レアジョブが選ばれる理由は多岐にわたりますが、主な理由としては下記3点が考えられます。

  • 優秀な講師陣:公用語が英語であるフィリピン人の方が講師となり、生きた英語を身につけることができる
  • 豊富な教材: 5,000以上の教材を提供しており、学習者のレベルや目的に応じて最適な教材を選べます。
  • 安心のサポート体制:初心者でも安心して始められるように、日本人カウンセラーが学習のサポートをしてくれます。

海外移住計画の第一歩として、スピーキング力を身につけたいと考えている方は、ぜひこちらの無料体験を試してみてはいかがでしょうか。

Related

【コピペOK】flutterのSizedBoxとExpandedの違いをわかりやすく
loading · loading
【flutter初心者】Column/Row/Center/Containerの違いをわかりやすく
loading · loading
【flutter】BoxDecorationの使い方をわかりやすく
loading · loading