The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

iOSエンジニアがFlutterを勉強するのにやったこと

こちらはコネヒトアドベントカレンダー2020 23日目の記事です。

普段はSwiftでiOSアプリを開発しているわたしがFlutterを入門するのにつかったものなどを紹介します。

Dartについて

Dart Language Tour(https://dart.dev/guides/language/language-tour)を読んで勉強しました。

忙しい人にはDartはSwiftと似ていて雰囲気で理解でもわかるので飛ばしてもよいかもしれません。 ですが、雰囲気では理解しずらくここだけはちゃんと勉強しておいたほうがよいのが以下です。

  • 定数のfinalとconst
  • 名前付き引数
  • Classコンストラク

定数のfinalとconst

  • finalはSwiftのletと同じと思って良い
  • constはコンパイル時に確定する値でfinalと異なりメモリの参照先も変更できません

名前付き引数

Dartで関数を普通に定義するとこうなります。

void enableFlags(bool bold, bool hidden) {
   ...
}

この関数を利用するとこのようにSwiftと違って引数名は指定できません。

enableFlags(true, false);

Dartで名前付き引数を利用するには{}をつける必要があります。

void enableFlags({bool bold, bool hidden}) {
   ...
}

こうすることでこのように関数の引数を名前付きで利用できます。

enableFlags(bold: true, hidden: false);

コンストラク

コンストラクタの定義を普通だったらこう書くのを

class Point {
  double x, y;

  Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
}

Dartだとsyntax sugarが用意されていてこのように省略して書くことができます。(https://dart.dev/guides/language/language-tour#constructors)

class Point {
  double x, y;

  Point(this.x, this.y);
}

さらに名前付き引数を利用する場合はこのように書きます。FlutterのWidgetとかはこの書き方になっているのでこの書き方を覚えておいたほうがよいです。

class Point {
  double x, y;

  Point({this.x, this.y});
}

Flutterの勉強

appbreweryのThe Complete Flutter Development Bootcamp Using Dartをやりました。

このコースですが、UdemyとApp Breweryの両方でたぶん同じものが開講されています

2020/12/21時点ではUdemyは1500円で、App Breweryは10$でした。私はApp Breweryを利用しました。

こちらのコースでは、環境構築、基礎知識だけでなく実際に手を動かして簡単なアプリをいくつか作成まで行います。Android Studioの便利なショートカットなども教えてくれたりするのでとても参考になりました。

全編英語ですがとても聞き取りやすく内容自体もiOSの経験者だと特に難しいことはないので理解できました。リスニングに自身のない方は英語字幕も用意されているので字幕をONにすると良いかと思います。

全部で17章あり結構な量がありますが、プログラミング初心者向けの内容(関数、クラス、リストなど)も結構あるので、その辺りはスキップするとよいかなと思います(わたしはスキップしました)。子育てであまり自由な時間のないわたしでも一ヶ月程度で完了しました。

気をつける点としてはちょっと古いAPIを使っているものなどがあるので、調べて対応する必要があります。たいていの場合はコメントのところに解決方法が書かれてたりするので大丈夫かなと思います。

修了するとcertificateも発行されます。

f:id:yanamura:20201221091707p:plain

感想

FlutterはiOSとReactの知識があれば入門はとても楽でした。ホットリロードもとても便利でいい感じでした!

ただ、クロスプラットフォームのアプリとしてつくる場合はプラットフォームごとにUIを変えるのは簡単にはできないので同じUIにする前提にしないといけなさそうなところや、ライブラリを追加などするとホットリロードは効かなくてビルドしなおさないといけなかったり(ビルドはかなり遅い)と開発序盤ちょっと時間かかるとか、課題もいくつかありそうでした。

今後Flutterに適した使い所があれば積極的に使っていきたいです!