Flutterでのextension(拡張関数)の便利な使い方

image

はじめに

今回は、Flutterの拡張関数(extension)のについて説明していきたいと思います。
拡張関数を使いこなすことができれば、コードの書き方の幅がかなり広がりますよ!

拡張関数extensionとは

拡張関数とは・・・あるクラスにメソッドを追加できるものです。
メソッドを追加できるということは、プロジェクト内でよく使うメソッドなどをあらかじめextensionで作っておくことで、あらゆる処理を書くのが楽になります。

以下で、実際に僕がよく使っているextensionの具体例を紹介したいと思います。

extensionを使ってcontextにメソッドを追加する

contextを使って、〇〇する。というケースはかなり多いと思います。
例えば以下のような、

  • Theme.of(context)...

  • MediaQuery.of(context)...
    などです。

  • contextから情報を引っ張ってくる。

  • contextを使って処理をする。
    などcontextを使うものはextensionを使うことで、かなりシンプルなコードにできます。

contextを拡張する具体例

以下のようにcontextを拡張すれば、コードがスッキリすると思います。

import 'package:flutter/material.dart';

extension ContextEx on BuildContext {
  TextTheme get textTheme => Theme.of(this).textTheme;

  ColorScheme get colorTheme => Theme.of(this).colorScheme;

  Size get screenSize => MediaQuery.of(this).size;

  double get screenHeight => MediaQuery.of(this).size.height;

  double get screenWidth => MediaQuery.of(this).size.width;

  ScaffoldFeatureController<SnackBar, SnackBarClosedReason> showSnack(
      SnackBar snackBar) {
    return ScaffoldMessenger.of(this).showSnackBar(snackBar);
  }
}

スクリーンの横幅を取得する部分は、

final screenWidth = MediaQuery.of(context).size.width;

でなく、

final screenWidth = context.screenWidth;

というようにスッキリ書けるようになります。

extensionを使ってenumにメソッドを追加する

enumは条件分岐の際によく使われると思います。
extensionを使ってやることで、こちらもスッキリしたコードになると思います。

enumを拡張する具体例

enumに条件分岐用のメソッド追加する方法は以下の通りです。
この説明では、TestTypeというenumを仮に使用します。

enum TestType { one, two, three }

extension TestTypeEx on TestType {
  bool get isOne => this == TestType.one;

  bool get isTwo => this == TestType.two;

  bool get isThree => this == TestType.three;
}

ここでよくあるケースとして、

void testFunction(TestType testType) {
  if (testType == TestType.one) {
    //...
  } else if (testType == TestType.two) {
    //...
  } else {
    //...
  }
}

上記のような条件分岐がよくあると思います。
enumの名前(ここではTestType)が長いと、コードも冗長となってしまいがちです。
しかし、extensionを使うことで、testTypeの条件式スッキリします。

void testFunction(TestType testType) {
  if (testType.isOne) {
    //...
  } else if (testType.isTwo) {
    //...
  } else {
    //...
  }
}

プロジェクト内に、特定のenumを使った条件式が多いほど効果があると思います。

Flutterでextensionを使う際の注意点

1つだけ注意点があります。
それはimport漏れです。
extensionで拡張したメソッドは、現状コード補完が効いてくれないです。
「拡張したメソッドが候補に出てこない...」ということがあるかもしれないので、拡張関数を書いたファイルをimportできているか確認しましょう。

最後に

いかがでしたか。
Flutterでextensionを使いこなせるようになれば、従来のコードよりもかなりスッキリしたコードが書けるようになると思います。 参考になれば幸いです。

参考

https://dart.dev/guides/language/extension-methods https://qiita.com/YusukeIwaki/items/b866c6ebbbab8859e262

お知らせ

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日にアプリ開発講座を開催します!会場は岐阜県美濃加茂市のコワーキングスペース「こやぁね」です。興味のある方は是非ご参加ください!

Read More
可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More

タグ

Flutter (70)初心者向け (22)イベント (15)Nextjs (8)Google Apps Script (7)可茂IT塾 (6)Firebase (6)React (5)新卒 (3)就活 (3)給与支払報告書 (3)riverpod (3)Dart (3)JavaScript (3)TypeScript (3)インターン (3)FlutterWeb (2)画像 (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)ワーケーション (2)社会人 (2)大学生 (2)お知らせ (2)webfeed (1)RSS (1)CodeRunner (1)VSCode (1)個人開発 (1)設計 (1)フルリモート (1)学生向け (1)Java (1)Spring Boot (1)エンジニア (1)DeviceOrientation (1)正規表現 (1)神楽 (1)趣味紹介 (1)プログラミングだけではない可茂IT塾のメンバー (1)線型計画法 (1)事例 (1)PreferredSize (1)マテリアルデザイン (1)Material (1)クパチーノデザイン (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)シェアハウス (1)スクレイピング (1)Gmail (1)Googleグループ (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)Vercel (1)Google Domains (1)branch (1)Git (1)オンラインオフィス (1)Freezed (1)アイコン (1)Apple Store Connect (1)FlutterGen (1)検索機能 (1)Navigator (1)メール送信 (1)カスタム認証 (1)アニメーション (1)FloatingActionButton (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)Dialog (1)Figma (1)デザイン (1)Slack (1)BI (1)非同期処理 (1)BackdropFilter (1)iOS (1)レビュー (1)getAuth (1)匿名 (1)Algolia (1)chakra-ui (1)コンサルティング (1)Symbol (1)reactive_forms (1)

お知らせ

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日にアプリ開発講座を開催します!会場は岐阜県美濃加茂市のコワーキングスペース「こやぁね」です。興味のある方は是非ご参加ください!

Read More
可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More