0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Stateパターンについて調べたのでFlutterでサンプルを作ってみた

Posted at

Stateパターンについて軽く

クラス内のとある状態によって同じクラスでも振る舞いが変わることが多々ある。
それをそのままクラス内で表現しようとすると、
この条件の時にはこう、こっちの時はこう、とIf分岐だらけになってしまうので、
状態ごとにクラス化しシンプルなコードとするパターン。

サンプルとして何を作ったか

赤、青どちらの色で出力するかのボタンを用意して、
色の出しわけを状態としてStateパターンで実装する。

クラス図

コード

GitHub に完全版があります。

output_state.dart
import 'dart:ui';

abstract class OutputState {
  Color getColor();
  String getText();
}
state_red.dart
import 'dart:ui';

import 'package:flutter_state/utils/output_state.dart';

class StateRed implements OutputState {
  @override
  Color getColor() {
    return const Color(0xFFC62828);
  }

  @override
  String getText() {
    return '赤色だよ';
  }
}
state_blue.dart
import 'dart:ui';

import 'package:flutter_state/utils/output_state.dart';

class StateBlue implements OutputState {
  @override
  Color getColor() {
    return const Color(0xFF536DFE);
  }

  @override
  String getText() {
    return '青色だよ';
  }
}
main.dart
  :
  : // 割愛
  :
class _MyHomePageState extends State<MyHomePage> {
  final _textController = TextEditingController();
  String _outputText = '';
  Color _outputColor = const Color(0xFFC62828);
  OutputState? _outputState;

  @override
  void initState() {
    super.initState();

    _outputState = StateRed();
  }

  @override
  void dispose() {
    _textController.dispose();
    super.dispose();
  }

  void _changeRed() {
    _outputState = StateRed();
    setState(() {
      _outputColor = _outputState!.getColor();
      _outputText = _outputState!.getText();
    });
  }

  void _changeBlue() {
    _outputState = StateBlue();
    setState(() {
      _outputColor = _outputState!.getColor();
      _outputText = _outputState!.getText();
    });
  }
  :
  : // 割愛
  :

以上

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?