コンテンツにスキップ

Dart

実行環境

DartPad

チュートリアル

Tutorials | Dart

命名規則

Effective Dart: Style | Dart

非同期処理

JavaScript のPromiseFuture

Future 内でまた非同期処理の結果を待つ場合、メソッドにasyncを付与する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Future<CognitoAuth> cognitoLogIn(
    CognitoLogInRef ref, String userName, String password) async {
  final url = Uri.https(cognitoEndpoint, "/");
  final headers = {
    "Content-Type": "application/x-amz-json-1.1",
    "X-Amz-Target": "AWSCognitoIdentityProviderService.InitiateAuth",
  };
  final body = jsonEncode({
    "ClientId": cognitoClientId,
    "AuthFlow": "USER_PASSWORD_AUTH",
    "AuthParameters": {"USERNAME": userName, "PASSWORD": password}
  });
  final response = await http.post(url, headers: headers, body: body);
  final json = jsonDecode(response.body);
  final auth = CognitoAuth(
    accessToken: json["AuthenticationResult"]["AccessToken"],
    expiresIn: json["AuthenticationResult"]["ExpiresIn"],
    idToken: json["AuthenticationResult"]["IdToken"],
    refreshToken: json["AuthenticationResult"]["RefreshToken"],
    tokenType: json["AuthenticationResult"]["TokenType"],
  );
  ref.read(cognitoAuthProvider.notifier).state = auth;
  logger.d(auth);
  return auth;
}

言語

Dart basics | Dart

new

他の言語でオブジェクト生成に使うnewは Dart では書かなくて良い。(書いても良い。昔は書く記法だったが、現在は不要らしい)

配列

List<型>で書く。型[]ではない。

public, private

Dart では 変数名やメソッド名に_をつけると private になる。

const, final

Variables | Dart

finalは 1 回だけ代入可能。

constはコンパイル時の定数。(constは暗黙的にfinal)

アロー関数的なやつ

アロー演算子を使う場合、インラインになる。

1
2
3
4
5
void main() {
  final f = () => 0;

  print(f());
}

式を使う場合はアロー演算子を使わず、ブロックで囲う。

1
2
3
4
5
6
7
void main() {
  final f = () {
    return 0;
  };

  print(f());
}

非 null アサーション演算子

Flutter – Dart を学ぶ際に押さえておきたい「?」と「!」 | IT ミュージアム

value!みたいな書き方。valueは null 許容だが、この式が参照されるときは絶対に null じゃないと言い切れる場合はこの演算子を使って警告を無視することができる。

Exception と Error の違い

アプリの振る舞いの制御には Error を使う。

【Dart】Exception(例外)と Error(間違い)の使い方