1
0

Flutterについて書いてみた

Last updated at Posted at 2024-09-29

スマホアプリの開発に興味を持ち、勉強中のFlutterについて書いてみました。

特徴
シングルコードベースでのクロスプラットフォーム開発
Flutterを使用すると、1つのコードベースで複数のプラットフォーム向けのアプリを開発できます。これにより、開発時間とコストを大幅に削減できます。

高性能
Flutterは、独自の描画エンジンであるSkiaを使用しており、プラットフォーム固有のウィジェットを使用せずに一貫したパフォーマンスを提供します。

豊富なウィジェット
Flutterには、マテリアルデザインやカーパーノデザインに基づいた豊富な組み込みウィジェットがあり、カスタマイズも容易です。

Hot Reload機能
Hot Reloadにより、コードの変更が即座にアプリに反映されます。これにより、開発とデバッグの効率が大幅に向上します。

Dart言語
Flutterは、シンプルで学習しやすいオブジェクト指向言語であるDartを使用します。Dartは、静的型付け言語でありながら、柔軟な記述が可能です。

ウィジェット(Widget)
Flutterのアプリはすべてウィジェットで構成されます。ウィジェットは、視覚的な要素だけでなく、レイアウトや動作も定義します。

ウィジェットの種類
StatelessWidget:状態を持たない不変のウィジェット。
StatefulWidget:内部に状態を持ち、状態の変化に応じて再描画されるウィジェット。

例を交えた説明
StatelessWidgetの例

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'StatelessWidgetの例',
      home: Scaffold(
        appBar: AppBar(
          title: Text('StatelessWidget'),
        ),
        body: Center(
          child: Text('これは状態を持たないウィジェットです'),
        ),
      ),
    );
  }
}

説明:
MyAppはStatelessWidgetを継承し、状態を持たないシンプルなウィジェットを定義しています。
buildメソッドでUIを構築し、画面にテキストを表示します。
StatefulWidgetの例

import 'package:flutter/material.dart';

void main() => runApp(CounterApp());

class CounterApp extends StatefulWidget {
  @override
  _CounterAppState createState() => _CounterAppState();
}

class _CounterAppState extends State<CounterApp> {
  int _counter = 0;

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'StatefulWidgetの例',
      home: Scaffold(
        appBar: AppBar(
          title: Text('StatefulWidget'),
        ),
        body: Center(
          child: Text(
            'ボタンを押した回数: $_counter',
            style: TextStyle(fontSize: 24),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: '増加',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

説明:
CounterAppはStatefulWidgetを継承し、内部に状態(_counter)を持ちます。
setStateメソッドを使って状態を更新し、UIを再描画します。
画面下部のボタンを押すと、カウントが増加します。

状態管理
setState
setStateメソッドを使用して、ウィジェットの状態を更新し、再描画をトリガーします。
例:

void _updateState() {
  setState(() {
    // 状態を更新するコード
  });
}

状態管理パッケージ
大規模なアプリケーションでは、状態管理を効率化するために以下のパッケージが利用されます。

Provider:公式推奨の状態管理パッケージ。
Bloc:ビジネスロジックとUIを分離するアーキテクチャパターン。
Riverpod:Providerの改善版として設計されたパッケージ。

レイアウトとレイアウトウィジェット
レイアウトの基本
Flutterでは、ウィジェットをネストして複雑なレイアウトを構築します。

主なレイアウトウィジェット
Container:パディングやマージン、背景色などを設定可能。
RowとColumn:ウィジェットを水平方向や垂直方向に配置。
Stack:ウィジェットを重ねて配置。
例:Columnウィジェット

Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[
    Text('上のテキスト'),
    Text('下のテキスト'),
  ],
)

ナビゲーションとルーティング
ナビゲーション
複数の画面間を遷移するためにNavigatorウィジェットを使用します。

画面遷移の例:

Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => SecondScreen()),
);

戻る操作

Navigator.pop(context);
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0