メインコンテンツへスキップ
【flutter】他クラスの関数/変数を使う方法をわかりやすく解説
  1. Posts/

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

Flutter開発 Dartプログラミング クラス・オブジェクト指向 初心者向けチュートリアル Flutter アプリ開発 クラス間連携 関数呼び出し 変数アクセス Flutterチュートリアル 初心者向け オブジェクト指向 Flutter開発テクニック Dartプログラミング

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で他クラスの変数/関数を使う方法:まとめ
#

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

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

関連記事

【flutter初心者】Column/Row/Center/Containerの違いをわかりやすく
Flutter開発 UI/UXデザイン レイアウト実装 初心者向けチュートリアル Flutter アプリ開発 Column Row Center Container レイアウトウィジェット Flutter初心者 UI設計 Flutterチュートリアル
【Flutter】BoxDecorationの使い方をわかりやすく
Flutter開発 UIデザイン 初心者向けガイド Flutter BoxDecoration UIデザイン アプリ開発 Container DecorationImage Border Shadow 背景デザイン 初心者向け Flutter UI 作り方
【Kotlin】RecyclerView+Fragmentで画面遷移を実装する際に気をつけるべき点
Android開発 Kotlinプログラミング UI実装 初心者向けチュートリアル Kotlin Android開発 RecyclerView Fragment 画面遷移 アプリ開発 初心者向け UI実装 モバイル開発 Androidチュートリアル