flutter ボタンをコンポーネント化する

投稿者:

こんなボタンがあるとするやん?

                  child: OutlinedButton(
                    child: const Text('Start'),
                    style: OutlinedButton.styleFrom(
                      primary: Colors.black,
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(10),
                      ),
                      side: const BorderSide(),
                    ),
                    onPressed: () {
                      Navigator.of(context).pushNamed("/a");
                    },
                  ),

デザインを使いまわしたいので、クラスにする

ボタンのラベルとタップ時の動作は呼び出し元で定義する

class TestButton extends StatelessWidget {
  final String label;
  final GestureTapCallback onPressed;

  TestButton({required this.label, required this.onPressed});

  @override
  Widget build(BuildContext context) {
    return
      OutlinedButton(
        child: Text(label),
        style: OutlinedButton.styleFrom(
          primary: Colors.black,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10),
          ),
          side: const BorderSide(),
        ),
        onPressed: onPressed,
      );
  }
}

このように使う

                  child: TestButton(
                    label: "hello",
                    onPressed: () {
                      Navigator.of(context).pushNamed("/a");
                    },
                  ),