Open41

Flutter memo

mm
int? lineCount;
assert(lineCount == null);

?がついているのはnull許容型。
assertは引数がfalseになると例外を発生する。

mm

RubyとDartの対照表

左の値がない時に右の値を代入する

b ||= value
b ??= value;

クラスの確認

p a.class
print('The type of a is ${a.runtimeType}');
mm

特定のデバイスで起動する場合
flutter run -d device_id

デバイスのidは、flutter devicesで端末情報の次に表示されるemulator-5554など

mm

VSCodeの場合、右クリック -> Format Document から整形できる

mm

パッケージの追加方法

  • pubspec.yamlに追加するパッケージを記載
  • flutter pub get
mm

widgetにはいくつか種類がある。

  • StatelessWidget

    • immutabel 不変
    • ヘッダーなど?
  • StatefulWidget

  • State

mm
void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

voidの後の関数名に_がつくのはなぜ?

_ がつくものは、ライブラリの中でだけ参照できるらしい。private的なもの?

mm

dart migrate --apply-changes でnull safetyに対応してないプロジェクトを対応できるらしい

mm

primaryColorprimarySwatchの違いはなんだろう

mm

VSCodeの左側にあるデバッグメニューからビルドすると、⌘ + sでの保存時にホットリロードしてくれるので便利。
が、なぜか手元の環境ではiOSだけ動かなかった

mm

StatelessWidget を継承する上で必要なこと

  • ミュータブルなフィールドを持っていないこと
  • Widgetを返すbuildメソッドをオーバーライドすること

(ミュータブルなフィールド = finalキーワードが付与されていないフィールド)

mm

クラスの上部によくあるfinal String title;みたいな何も代入されていない変数、クラスに渡された引数がコンストラクタでこれに代入されてるっぽい。なんで仮引数みたいな書き方しないんだろう

mm

Flutterは宣言的にコードを記述する。

状態を変えたいときは
○新しい状態を与えてウィジェットを作り、古いウィジェットを破棄する
×状態を変える

buildメソッドは新しい状態を与えて以前のウィジットを破棄するために用いる

mm

ウィジットの中に書くこれはコンストラクタらしい。
const OnlineFriendPage({Key? key}) : super(key: key);

main() {
  Hoge hoge = new Hoge();     //Ⅰインスタンス生成
  print(hoge.title); // fooと表示される
}
class Hoge {
  String title;
  Hoge() : this.foo();    //コンストラクタ
  Hoge.foo() {
    this.title = 'foo';
  }
  Hoge.title(this.title);
}

こんな感じで、クラスの中にある
Hoge() : this.foo()コロンを使うことでリダイレクト先のコンストラクタを指定できる。
上の例のように、コンストラクタからコンストラクタを呼ぶ処理は、redirecting constractorsと呼ぶらしい。

main() {
  Hoge hoge = new Hoge('foo');     //Ⅰインスタンス生成
  print(hoge.title); // fooと表示される
}

class Hoge {
  final String title;
  Hoge(this.title);
}

これはAutomatic field initializationと呼ばれるもので、コンストラクタでクラス名(this.フィールド名)と指定すれば、代入処理を書かなくても自動で代入してくれる。

const OnlineFriendPage({Key? key}) : super(key: key);
これはredirecting constractorsでsuper(key: key);を指定していて、継承元のStatelessWidgetのコンストラクタを呼び出している。

https://note.com/zutai_dekame/n/nabf22f1a3eec

mm

state管理に使う変数やcontrollerの値は、Widgetの外に配置しないと画面が更新される際にリセットされてしまうので注意

mm

AppBarに戻るボタンを表示しない方法
automaticallyImplyLeading: false

デフォルトだと表示されるので、ログイン画面とかはこの設定にするのが良さそう