LoginSignup
17
3

More than 1 year has passed since last update.

【Flutter】初学者がFlutterでアプリのテーマカラーを設定しようとして出したエラーが、Flutter以前の話だった

Last updated at Posted at 2021-12-21

この記事は、Flutter大学 Advent Calendar 2021の 22日目 の記事です。

技術記事初投稿で至らぬ部分もあるかと思いますが、ご笑覧ください。

はじめに

プログラミングまったく未経験の状態でFlutter大学に入ってすぐ、共同開発というものに参加させていただきました。

ほとんどプログラミングができない中で参加した共同開発では、UIのデザインだったりアイコン作成だったり、UI文言の翻訳などのプログラミング以外の部分を担当してました。

そんな中でも初学者の私でもできそうなタスクとして、
「アプリのテーマカラーを設定する」というタスクをいただきました。

結果としてはアプリのテーマカラーをうまく設定できず、エラーが出てしまいました。

この記事では、その原因についてまとめてみたいと思います。

Flutterでアプリのテーマカラーを設定する方法

Flutterでアプリのテーマカラーを設定するときに多く使用されるのはThemeDataだと思います。

primarySwatchで色を指定すると、アプリ全体の色がMaterial Designに準拠したいい感じの色に変更できます。
ので、特にこだわりがなければこのprimarySwatchから色指定してしまうのがいいかと思います。

Flutterのデフォルトのカウンターアプリにも、primarySwatchが設定されていますね。

Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }

primarySwatch: Colors.blue, の"blue"の部分を他の色に変えることで、アプリ全体の色を簡単に変更できます。

Material Colorではない色を設定したい場合

primarySwatchからはMaterial Designに準拠したMaterial Colorを設定できますが、独自の色を設定したい場合には、自分でMaterial Colorを定義する必要があります。

Material Colorはある一色を指しているのではなく、Material Designで定義されている10色のパターン(パレットというそうです)を指しています。

そのため、自分が設定したい色を中心とした10色のパターンを設定する必要があります。

※この辺りについては、こちらの記事を参照させていただきました。この記事がなかったら、何も手付かずで途方に暮れていたと思います。ありがとうございます。

実際にやってみた

今回の共同開発では独自のアプリカラーを設定したいということで、上記の記事を参考に、独自カラーを設定していきました。

「プログラミングはよくわからないけど、カラーコードなら心得があるゾ」などと思いながらも、実際には記事中にあるサイトで指定したい色のカラーコードを割り出しました。

そして出てきたコードをサイトにコードのものと置き換えて完成!

const MaterialColor customSwatch = const MaterialColor(
  0x23580C,
  <int, Color>{
    50: Color(0xE5EBE2),
    100: Color(0xBDCDB6),
    200: Color(0x91AC86),
    300: Color(0x658A55),
    400: Color(0x447130),
    500: Color(0x23580C),
    600: Color(0x1F500A),
    700: Color(0x1A4708),
    800: Color(0x153D06),
    900: Color(0x0C2D03),
  },
);

...のつもりでしたが、エラーが出てしまいました。

結局自分では解決できずに、共同開発のリーダーに泣きついたところ、

「カラーコードの前のFFが抜けてました」

との回答をいただきました。

正しくは...

const MaterialColor customSwatch = const MaterialColor(
  0xFF23580C,
  <int, Color>{
    50: Color(0xFFE5EBE2),
    100: Color(0xFFBDCDB6),
    200: Color(0xFF91AC86),
    300: Color(0xFF658A55),
    400: Color(0xFF447130),
    500: Color(0xFF23580C),
    600: Color(0xFF1F500A),
    700: Color(0xFF1A4708),
    800: Color(0xFF153D06),
    900: Color(0xFF0C2D03),
  },
);

だったようです。

FFとは何なのか

カラーコードを入力することに夢中で、前述のサイトのコードにもしっかりと書いてあった
、「カラーコードの前にあるFF」の意味を考えていませんでした。

このFF、透明度を表す16進数だったようでして、FFで100%、つまり不透明ということでした。
この記事この記事で知りました。

というのも、カラーコードを普通のRGBで考えてしまっていたのですが、この場合では、16進数のARGBを用いる必要がありました。

そのため、正しく色を指定できずに、エラーとなってしまいました。
このページこの記事が参考になりました。

「プログラミングはよくわからないけど、カラーコードなら心得があるゾ」なんて言っていましたが、知っていると思い込んでいただけで、正しく理解をしていなかったということでした。

教訓

Flutterでのプログラミングを始めて「Flutter難しいな」なんて思っていましたが、私がつまずいた箇所はFlutter以前の問題でした。

RGBAは見かけることはありましたが、Material Designでは(Androidでは?)ARGBを使うということは今回初めて知りました。

Flutterでアプリを作っていくにしても、Material DesignなどFlutterという枠を超えて色々学ぶ必要があるなと思いました。

逆に独自の色を設定しないでprimarySwatchで指定できる色で済ませられるのであれば、それらの知識がなくとも気軽に色を指定できる、という見方もできます。

プログラミング初学者、知らないことばかりで手が止まってしまいそうですが「とりあえずできること」を一つ一つ積み上げていきたいと思います。

最後に

こんな超初学者の私にも、タスクを振って、親切に教えてくださった共同開発のメンバーや、共同開発というアプリ制作の場を提供してくださったFlutter大学のコミュニティには感謝しています。

今度は私が何かしら貢献していけるよう、頑張ります。

最後の最後に

私が参加した共同開発で作ったアプリがリリースされました!

SNSが生活の一部に、オンラインが当たり前になった今、人と会う時間も今まで以上に大切にするための日記アプリです。
使っていただけたら嬉しいです!

17
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
3