FlutterはDartで書かれたフレームワークですので、Dartの基本的な文法を理解しておく必要があります。
基本的な扱い方をメモ書き程度にまとめました。JavaScriptとかなり似た文法を持つので、違いを意識しながら読んでみてください。
変数と型
Dartでは、変数を宣言する際にデータ型を指定する必要があります。
int x = 10;
double y = 3.14;
String str = "Hello, World!";
bool flag = true;
List<int> list = [1, 2, 3];
Map<String, int> map = {"apple": 100, "banana": 200};
制御構文
Dartでは、JavaScriptと同様に、if文、for文、while文などの制御構文を使用することができます。
// if文
if (condition) {
// conditionがtrueの場合に実行される処理
} else {
// conditionがfalseの場合に実行される処理
}
// for文
for (var i = 0; i < 10; i++) {
// 0から9までの数値を順番に処理する
}
// while文
while (condition) {
// conditionがtrueの場合に繰り返される処理
}
関数
Dartの関数は、引数と戻り値に型を指定します。また、関数の引数にデフォルト値を指定することができ、オプションの名前付き引数を使用することもできます。
// 通常の関数定義
int add(int a, int b) {
return a + b;
}
// 引数にデフォルト値を指定する
int addWithDefault(int a, [int b = 10]) {
return a + b;
}
// 名前付き引数を使用する
int addWithNamedParams({int a, int b}) {
return a + b;
}
// 名前付き引数を使用する(デフォルト値も指定する)
int addWithNamedParamsAndDefaults({int a = 0, int b = 0}) {
return a + b;
}
クラスとオブジェクト
Dartでは以下のようにクラスの宣言を行います。
class MyClass {
// フィールド
int num;
// コンストラクタ
MyClass(int num) {
this.num = num;
}
// メソッド
void printNum() {
print(num);
}
}
Dartの場合、オブジェクトの作成時にnew 演算子を使用ぜず、クラスのコンストラクタを呼び出すことで作成します。
// オブジェクトの作成
var obj = MyClass(10);
obj.printNum(); // 10を出力
クラスの継承はextendsキーワードを使用して定義します。
class MySubclass extends MyClass {
// フィールド
String str;
// コンストラクタ
MySubclass(int num, String str) : super(num) {
this.str = str;
}
// メソッド
void printStr() {
print(str);
}
}
非同期処理
Dartでは、非同期処理のためのasync/await構文がサポートされています。下記の例では、fetchNum()関数が1秒間待機した後、10を返します。
Dartの非同期処理で結果を返すためには、Futureを使用します。また、asyncキーワードを付与した関数は、その関数内でawaitキーワードを使えます。awaitキーワードは、非同期処理が完了するまで待機します。
Future<int> fetchNum() async {
await Future.delayed(Duration(seconds: 1)); // 1秒待つ
return 10;
}
void main() async {
var num = await fetchNum(); // 非同期処理の完了を待つ
print(num); // 10を出力
}
Futureを使用した非同期処理のもう一つの例です。
Future<int> fetchNum() {
return Future.delayed(Duration(seconds: 1), () => 10);
}
void main() {
fetchNum()
.then((num) => print(num)) // 10を出力
.catchError((e) => print(e));
}