Flutterは、Googleが開発したクロスプラットフォームのモバイルアプリ開発フレームワークです。1つのコードベースでiOSとAndroid両方のアプリを作成できる点が大きな特徴です。このガイドでは、Flutter初心者の方向けに、基本的な概念から応用まで、サンプルコードを交えて解説します。
1. Flutterの基本構造
Flutterアプリの基本構造は、ウィジェットと呼ばれる部品を組み合わせて構築します。最もシンプルなFlutterアプリは以下のようになります:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('はじめてのFlutterアプリ'),
),
body: Center(
child: Text('こんにちは、Flutter!'),
),
),
);
}
}
2. ウィジェットの基本
Flutterでは、すべてがウィジェットです。ウィジェットには主に2種類あります:
- StatelessWidget: 状態を持たない静的なウィジェット
- StatefulWidget: 状態を持ち、動的に変化するウィジェット
以下は、カウンターアプリの例です:
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('カウンターアプリ'),
),
body: Center(
child: Text('カウント: $_counter'),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
child: Icon(Icons.add),
),
);
}
}
3. レイアウトとスタイリング
Flutterでは、様々なレイアウトウィジェットを使用してUIを構築します。以下は、よく使用されるレイアウトウィジェットの例です:
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('項目1'),
Text('項目2'),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Icon(Icons.star),
Icon(Icons.star),
Icon(Icons.star),
],
),
],
)
4. ナビゲーションと画面遷移
Flutterでは、Navigator
クラスを使用して画面間の遷移を管理します。以下は、新しい画面に遷移する例です:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
5. 状態管理
大規模なアプリケーションでは、状態管理が重要になります。Flutterでは、Provider、Riverpod、BLoCなど、様々な状態管理ソリューションがあります。以下は、Providerを使用した簡単な例です:
class CounterProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
// 使用例
Consumer<CounterProvider>(
builder: (context, counter, child) => Text('${counter.count}'),
)
6. APIとの通信
Flutterでは、http
パッケージを使用してAPIとの通信を行います。以下は、JSONデータを取得する例です:
import 'package:http/http.dart' as http;
import 'dart:convert';
Future<List<Post>> fetchPosts() async {
final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
if (response.statusCode == 200) {
List<dynamic> body = jsonDecode(response.body);
return body.map((dynamic item) => Post.fromJson(item)).toList();
} else {
throw Exception('Failed to load posts');
}
}
7. アニメーション
Flutterは豊富なアニメーション機能を提供しています。以下は、簡単なフェードインアニメーションの例です:
class FadeInDemo extends StatefulWidget {
@override
_FadeInDemoState createState() => _FadeInDemoState();
}
class _FadeInDemoState extends State<FadeInDemo> with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation<double> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
);
_animation = CurvedAnimation(parent: _controller, curve: Curves.easeIn);
_controller.forward();
}
@override
Widget build(BuildContext context) {
return FadeTransition(
opacity: _animation,
child: Text('フェードインテキスト'),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
まとめ
Flutterは直感的で学びやすいフレームワークですが、マスターするには時間と練習が必要です。このガイドで紹介した基本的な概念を理解し、実際にコードを書いて学んでいくことをおすすめします[1][3]。
Flutterの学習には個人差がありますが、プログラミング経験がある方なら1〜3ヶ月程度で基本的なアプリ開発ができるようになるでしょう。継続的な学習と実践を通じて、徐々にスキルを向上させていってください。
最後に、Flutterの公式ドキュメントやコミュニティリソースを活用することも重要です。Flutterは急速に進化しているフレームワークなので、常に最新の情報をキャッチアップすることが大切です。