らばーいもっきんぐ

プログラミング等々についての覚え書き

【Flutter】ReorderableListViewの並び替え時の背景色を変更する方法

はじめに

Flutter の ReorderableListView を使用して項目の並べ替えをする際に、デフォルトでは選択した項目の背景色が白色になっていますが、この背景色を変更する方法について調べました。

並び替え時に背景が白になる挙動
選択した項目の背景色が白のため違和感がある

結論

こちらの Issue にある通り、Theme ウィジェットでラップすることで解決することができます。

以下解説。

ReorderableListView とは

www.youtube.com

api.flutter.dev

ReorderableListViewはリスト表示された項目をドラッグアンドドロップで簡単に並び替えることができるウィジェットです。

並び替え可能なリストを簡単に実装できる便利なウィジェットですが、並び替える項目の背景色はデフオルトでは白色になっています。

そのため背景色が白色でない場合は、並び替えをする時だけ部分的に背景が白色になってしまい、全体のデザインを損なう可能性があります。

並べ替え時の背景色を変更する方法

return Theme(
    data: ThemeData(
        canvasColor: Colors.transparent
    ),
    child: ReorderableListView(...)
)

並べ替え時の背景色を変更するには、上記のように ReorderableListView ウィジェットを Theme ウィジェットでラップします。

さらに、ThemeDataのcanvasColorプロパティを使い、背景色を透過することで本来の背景色が表示されるようにします。

上書きする際に指定する色は Colors.transparent を指定しています。

これは背景を透過する指定のため、デフォルトでは白色になっているものを透過させ、本来の背景色を表示しています。

背景色を変更した後の挙動
背景色を変更することで自然な見た目になりました

Theme ウィジェットとは

flutter.dev

Theme は、テーマカラーやフォントスタイルを指定する事でアプリ全体のデザインを統一するために利用されます。 今回は Theme ウィジェットを使って部分的に上書きをする事で背景色を変更しています。

まとめ

Flutter の Theme はトップレベルで一度設定するだけと思っていましたが、部分的にスタイルを上書きする場合にも使える事が分かりました。 ただ、もっとスマートなやり方は無いのかなという気もします。(ReorderableListView のプロパティで設定できるとありがたい)

参考

https://flutter.dev/docs/cookbook/design/themes https://itome.team/blog/2019/12/flutter-advent-calendar-day12/