Flutter、Dartに関してメモ

# Flutter、Dartに関してメモ
flutter, Dart...に関して覚えておきたいけど、忘れた時に見直すためメモしておく。

## pubspec.yamlのフィールド

|  フィールド  |  用途  |
| ---- | ---- |
|  name  |  アプリ名  |
|  description  |  アプリの説明  |
|  version  |  アプリのバージョン番号  |
|  environment  |  Dart/Flutter SDKのバージョン制約  |
|  dependencies  |  使うパッケージ  |
|  dev_dependencies  ​|  開発時のみ使うパッケージ  |
|  flutter  ​|  Flutterの設定（アセットなど）  |


## pubspec.yamlのバージョン指定方法

```pubspec.yaml
dependencies:
  flutter:
   sdk: flutter
  cupertino_icons: ^0.1.2
  shared_preferences: ^0.5.12+2
```

|  フィールド  |  意味  |
| ---- | ---- |
|  any  |  バージョン指定ない（非推奨）  |
|  1.2.3  |  1.2.3のみ  |
|  >=1.2.3  |  1.2.3以上  |
|  <1.2.3  |  1.2.3未満  |
|  ^1.2.3  |  1.2.3以上、2.0.0未満  |
|  >=1.2.3 <2.0.0  |  1.2.3以上、2.0.0未満  |


## flutterのコマンド

|  コマンド  |  用途  |
| ---- | ---- |
|  flutter pub get  |  未取得のパッケージ取得  |
|  flutter pub upgrade  |  最新版のパッケージ取得  |
|  flutter pub outdated  |  更新可能なパッケージのチェック  |
|  flutter pub deps  |  依存関係のチェック  |

## Dart 変数
### 型を固定しない場合：dynamic
```aaa.dart
dynamic val = 'val';
```
### 初期化で値によって型が決まる場合：var
```aaa.dart
var val = 'val'; // 文字列となる
```
### 初期化後、変更させたくない場合：final
```aaa.dart
final val = 'val'; // これ以降、変更時エラー
```
### 初期化後、変更させたくない場合：const
```aaa.dart
const val = 'val'; // これ以降、変更時エラー
```
(コンパイル時に確定した値を定数として持つ)

＊型の調査には、runtimeTypeプロパティを使用

```aaa.dart
var val = 'val';
print(val.runtimeType); // String と表示される
```

### 組み込み型
```aaa.dart
String val1 = 'val';
int val2 = 12;
double val3 = 12.55;
bool val4 = true;
List val5 = ['a', 'b', 'c'];
Set val6 = {'a', 'b', 'c'}; // 重複を許可しない配列
Map val7 = {
  'num1': 'one',
  'num2': 'two',
  'num3': 'three'
}; // Key: Value
```

## Dart 関数のパラメータ
### 位置パラメータ
```
void aaaBcc(bool a, bool b){}

aaaBcc(true, false);
```
### 名前付きパラメータ
```
void aaaBcc({bool ddd, bool fff}){}

aaaBcc(ddd: true, fff: false);
```
### オプションパラメータ
```
void aaaBcc(bool ddd, [bool fff=false]){}

aaaBcc(bool ddd, bool fff=false );
```

## Dart 演算子
### 算術演算子
|  演算子 |  意味  |
| ---- | ---- |
|  +  |  足し算  |
|  -  |  引き算  |
|  *  |  掛け算  |
|  /  |  割り算（double）  |
|  ~/  |  割り算（int）  |
|  %  |  余り（modulo）  |

### インクリメント、デクリメント演算子
|  演算子 |  意味  |
| ---- | ---- |
|  ++var  |  １加算してから使用  |
|  var++  |  使用してから１加算  |
|  --var  |  １減算してから使用  |
|  var--  |  使用してから１減算  |

### 複合代入演算子
|  演算子 |  意味  |
| ---- | ---- |
|  a+=b  |  a = a + b  |
|  a op= b  |  a = a op b  |
*opは算術演算子

### 割り当て演算子
|  演算子 |  意味  |
| ---- | ---- |
|  a ??= b  |  aがnullであればbを代入  |
|  a ?? b  |  aがnullであればbを実行  |

### 条件式演算子
|  演算子 |  意味  |
| ---- | ---- |
|  x ? a : b  |  xがtrueの時、aを実行、falseの時は、bを実行  |

### 比較演算子
|  演算子 |  意味  |
| ---- | ---- |
|  a == b  |  aとbが同値  |
|  a != b  |  aとbが異なる値  |
|  a > b  |  aがbより大きい  |
|  a < b  |  aがbより小さい  |
|  a >= b  |  aがb以上  |
|  a <= b  |  aがb以下  |

### 論理演算子
|  演算子 |  意味  |
| ---- | ---- |
|  !  |  NOT 否定  |
|  ||  |  OR 論理和  |
|  &&  |  AND 論理積  |

### 型テスト演算子
|  演算子 |  意味  |
| ---- | ---- |
|  is  |  指定した型をもつ  |
|  is!  |  指定した型をもたない  |

## Dart 条件分岐
### if - else, else if
```
if() {
...
} else if {
...
} else {
...
}
```

### for, for-in
```
for (var i = 0; i < 10; i++) {
...
}

var arr = [1, 2, 3];
for (var x in arr) {
...
}

arr.forEach(
  (val) => arr.ele()
);
```

### while, do-while
```
while() {
...
}

do {
...
} while();
```

### break, continue
```
while() {
  if(aaa = 'aaa'){
    break;
  }
}

while() {
  if(bbb = 'bbb'){
    continue;
  }
}
```

### switch-case
```
switch(aaa){
  case 'aaa':
    ...
    break;
  case 'bbb':
    ...
    break;
  case 'ccc':
  case 'ddd':
    ...
    break;
  default:
    ...
}
```

## 例外処理
### 例外クラスを指定した場合
```
throw FormatException('Expected at least 1 section');
```

### Stringオブジェクトをthrowした場合
```
throw 'Out of llamas';
```

### try-catch
```
try {
  ...処理
} on FormatException(e) {
  print(`Exception : $e`);
} catch(e) {
  print(`Exception : $e`);
} finally {
  ...
}
```

...