1. ホーム
  2. static

[解決済み] Flutterですべての定数を保持するためのベストプラクティスは何ですか?

2022-09-28 23:19:54

質問

最も良いプログラミングの方法は何でしょうか?

Flutterで定数クラスを作成する

を作成して、すべてのアプリケーション定数を簡単に参照できるようにします。というのがあるのは知っているのですが const キーワードがあることは知っていますが、定数フィールドを作成するために static を使用しても良いのでしょうか?それとも実行時にメモリの問題が発生するのでしょうか?

class Constants {
static const String SUCCESS_MESSAGE=" You will be contacted by us very soon.";
}

どのように解決するのですか?

編集

これで、フラグ --dart-define がFlutterの様々なコマンドラインに追加されたので、以下の回答はもう当てはまりません。

代わりに、好きなところで定数を宣言し、潜在的に他の答えを参照することができます。


には技術的な問題はありませんが static const には技術的な問題はありませんが、アーキテクチャ上、別の方法を取りたい場合があります。

Flutterは以下のような傾向があります。 ではなく はグローバル/スタティック変数を持たず、InheritedWidgetを使用する傾向があります。

ということは、書くことができる。

class MyConstants extends InheritedWidget {
  static MyConstants of(BuildContext context) => context. dependOnInheritedWidgetOfExactType<MyConstants>();

  const MyConstants({Widget child, Key key}): super(key: key, child: child);

  final String successMessage = 'Some message';

  @override
  bool updateShouldNotify(MyConstants oldWidget) => false;
}

そして、アプリのルートに挿入します。

void main() {
  runApp(
    MyConstants(
      child: MyApp(),
    ),
  );
}

といった感じで使われます。

@override
Widget build(BuilContext context) {
  return Text(MyConstants.of(context).successMessage);
}


これは static const よりも少しコードが多くなりますが、多くの利点を提供します。

  • ホット リロードで動作
  • 簡単にテスト可能、モック可能
  • アプリ全体を書き換えることなく、定数よりも動的なものに置き換えることができる。

しかし同時にそれは

  1. メモリをあまり消費しない (継承されたウィジェットは通常一度だけ作成されます)
  2. パフォーマンスが高い (InheritedWidget の取得は O(1))