Open1

buildメソッドの中に処理を書くのはよくない?

JboyHashimotoJboyHashimoto

どう対策すればいいのか?

flutter_hooksを使った場合はどうなるのか?

Flutter において、build メソッド内に重い処理やサイドエフェクトを伴う処理を書くのは、パフォーマンスや可読性の観点から推奨されません。flutter_hooks を使うことで、特にフックを活用して、このような問題を効果的に回避することができます。

以下は、flutter_hooks を使用して、build メソッド外で処理を実行する方法のいくつかです:

  1. useEffect:
    useEffect はコンポーネントのマウントやアンマウント時にサイドエフェクトを実行するためのフックです。Reactの useEffect に似ています。

    useEffect(() {
      // コンポーネントがマウントされたときの処理
      // ...
    
      return () {
        // コンポーネントがアンマウントされるときの処理(オプション)
        // ...
      };
    }, const []);
    
  2. useMemoized:
    useMemoized は高価な計算の結果をメモ化するためのフックです。

    final result = useMemoized(() {
      // 重い計算
      return computeSomethingExpensive();
    }, [dependency]);
    
  3. useState:
    useState はローカルステートを持つことができるフックです。このステートは build メソッド内で再描画をトリガーしますが、サイドエフェクトを持たないため安全です。

    final count = useState(0);
    
    ElevatedButton(
      onPressed: () => count.value++,
      child: Text('Increment'),
    );
    
  4. カスタムフック:
    複雑なロジックや状態を build メソッドから分離したい場合、カスタムフックを作成することができます。

    HookResult useCustomHook() {
      final something = useState();
    
      // 何らかのロジック
    
      return something.value;
    }
    

flutter_hooks を使用すると、上記のような方法で build メソッドからロジックを分離し、より整理された、効率的なコードを書くことができます。