こんにちはkzyです。

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

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

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

Undefined name っていうエラーよく遭遇しますよね

目次

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

本記事の対象者

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


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

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

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

dartはオブジェクト指向型言語(Object-Oriented-Programming)というものらしい

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

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

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

1
2
3
4
5
6
import 'package:flutter/material.dart';
import 'package:testFlutter/funcA.dart';

class XXX {

}

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

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

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

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

僕はVisual StudioにDartとFlutter用のプラグインを入れて開発してます。

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

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

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

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

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

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

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

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

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

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

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

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

main.dart(呼び出し先)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
    
}
shopData.dart(呼び出し元)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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クラスをインスタンス化する必要があります。

main.dart(呼び出し先)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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で他クラスの変数/関数を使う方法:まとめ

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

ポイント

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

これで一気に開発を進めやすくできるね!

さいごに

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

僕のブログサイト「kzy.tech〜日本脱出のための教科書〜」どのようなサービスで作られているかが気になる方は以下別記事にてご説明していますので、ご覧いただけますと小躍りして喜びます💃

【コピペOK】HUGOでアフィリエイト用ブログサイトを作ろう

手間暇かけずにサクッとアフィリエイト用のブログサイトを作りたいという方向け。

ある程度自由にカスタマイズできる、かつコマンド一つで 記事の自動生成ができる静的サイトジェネレータ「HUGO」についてまとめました。

また、海外移住の 英語とプログラミングを習得することを推奨しています。
これは私の経験則から言えることですが、上記二つのスキルがあれば海外移住は絶対に実現できます

以下に僕が実際に使って効率よくプログラミング学習ができるおすすめサービスを載せます😌

速習!おすすめプログラミング勉強法【Udemy】

いくつかプログラミング学習サービスを利用しましたが、一番効率よく勉強できると感じたのはUdemyでした。

Udemyでは動画での説明や解説等もあり親切で、学習教材も豊富にあることから プログラミング初学者の方が短期間でエンジニアを目指したいのであれば、非常に良い教材だと思います。

ちなみに私は文系卒で社会人になってから独学でudemyを使ってプログラミングの勉強をして、実際にエンジニアとして採用されました

Udemyのコースは1つ1,000円ほどなので、ITの参考本を一冊(3,000円)を買うよりもUdemyのコースを購入する方が安い上により効率的にプログラミングを勉強できると思います。
世界最大級のオンライン学習サイトUdemy

また、別記事にてダナンでの生活やIT関連についても記事を書いていますのでクリックいただけると嬉しくて踊ります💃

関連記事

【Udemy】未経験から始める格安プログラミング講座4選

未経験だけどプログラミングを学んでエンジニアになりたい、社会人だから時間もそれほど多く無いので効率よく勉強したい。 私もその内の一人でした。今回の記事で最短でエンジニアになるためのおすすめUdemy講座4選をご紹介したいと思います。

【ダナンで働く】ダナン在住者が伝える日本人がベトナムで仕事を見つける海外転職必勝法

ベトナム中部のリゾート都市ダナン。日本で働くことに疲れた僕がワークライフバランスを求めて海外を中心に就職活動をしました。 徐々に日本人の間でも人気になりつつあるダナンですが、いざ海外転職する場合どのような仕事が日本人にはあるのか本記事でお伝えしたいと思います。

【残業地獄/月200時間超】商社マンとエンジニアどちらがよりブラックか考えてみた

海外移住を始めて2年ほどが経過しました、日本に住んでいた時と今ベトナムに移住してからとでどのように生活が変わったのかをこちらの記事にまとめていこうと思います。