person t-kobayashi

RaisedButtonをElevatedButtonへ移行(1)

calendar_today 2021年05月13日 update 2021年05月19日
Facebook Twitter LINE はてなブックマーク Pocket

自社アプリで、RaisedButtonとFlatButtonを使用していましたが、これらのウィジェットは廃止されて、それぞれElevatedButtonとTextButtonに移行しました。本記事では、国旗マスターを例にして、更新手順をまとめておきたいと思います。※自社アプリでは使っていませんが、この他にOutlineButtonがOutlinedButtonに移行しています。

トップページにあるボタンはRaisedButtonを使用しています。コードは以下の通りです。

RaisedButton(
    onPressed: callback,
    padding: EdgeInsets.symmetric(vertical: 16.0),
    shape:
        RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
    color: Colors.orange,
    child: Text(
        buttonTitle,
        style: buttonTextStyle,
    ),
),

上記で使われているプロパティの中で、ElevatedButtonでもサポートされているのは、以下の2つです。

  • onPressed
  • child

ElevatedButtonのドキュメンテーションに記載がないのは、以下の3つで、すべてstyleプロパティに吸収された形になっているようです。

  • shape
  • color
  • padding

まずRaisedButtonをElevatedButtonに変更して、サポートされていないプロパティをコメントアウトして、どのように表示されるか確認します。

ElevatedButton(
    onPressed: callback,
    // padding: EdgeInsets.symmetric(vertical: 16.0),
    // shape:
    //     RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
    // color: Colors.orange,
    child: Text(
        buttonTitle,
        style: buttonTextStyle,
    ),
),

青色の少し小さめのボタンとして表示されます。これが新しいデフォルトになるようです。※ボタンの幅は親ウィジェットの影響で広くなっています。

それでは、一つずつプロパティを反映してもとのデザインを適用してきます。

color

スタイル関連のプロパティはまとめてstyleプロパティにElevatedButton.styleFromを使って設定する方法が移行ガイドに記載されているので、ここではその方法を採用したいと思います。もとのcolorプロパティで使っていた色であるcolors.orangeをElevatedButton.styleFromのprimaryプロパティに適用します。ホットリロードするとボタンの色が変わります。

padding

paddingプロパティも同様にElevatedButton.styleFromのpaddingプロパティに同じ値であるEdgeInsets.symmetric(vertical: 16.0)を適用します。

shape

最後にshapeプロパティもElevatedButton.styleFromのshapeプロパティに同じ値であるRoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0))を適用します。

結果、以下のようなコードになります。

ElevatedButton(
    onPressed: callback,
    // padding: EdgeInsets.symmetric(vertical: 16.0),
    // shape:
    //     RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
    // color: Colors.orange,
    style: ElevatedButton.styleFrom(
        primary: Colors.orange,
        padding: EdgeInsets.symmetric(vertical: 16.0),
        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
    ),
    child: Text(
        buttonTitle,
        style: buttonTextStyle,
    ),
),

あとはコメントアウトしたコードを削除して、ホットリロードしてもとのデザインに戻っていることを確認すれば、移行は完了です。

このように変更したことのメリットとしては、ButtonStyleをひとまとめにして、使い回しがしやすくなるというところでしょうか。以下のような書き方ができます。

final ButtonStyle buttonStyle = ElevatedButton.styleFrom(
    primary: Colors.orange,
    padding: EdgeInsets.symmetric(vertical: 16.0),
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
);

return ElevatedButton(
    onPressed: callback,
    style: buttonStyle,
    child: Text(
        buttonTitle,
        style: buttonTextStyle,
    ),
),

参考サイト

https://docs.google.com/document/d/1yohSuYrvyya5V1hB6j9pJskavCdVq9sVeTqSoEPsWH0/edit

関連記事

Flutterの記事一覧を見る

Flutterの質問

soichiro1210 が1年前に投稿

質問日時 2023年07月31日

a-sato が3年前に投稿

質問日時 2021年07月01日

a-sato が3年前に投稿

質問日時 2021年06月30日

takumi が3年前に投稿

質問日時 2021年05月20日

a-sato が3年前に投稿

質問日時 2021年05月14日

Flutterの質問一覧を見る
search