2
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.

flutter3で追加されたenumの書き方を使用します

Last updated at Posted at 2022-07-06

enumの内部でpropertyやmethodなど、一つのファイルで管理できるのが非常に良くてもう当たり前になっている

enum HogeType {
  hoge('ほげ', list: ['ほげ', 'hoge']),
  fuga('ふが', list: ['ふが', 'huga']),
  piyo('ぴよ', list: ['ぴよ']),
  foo('ふー', list: ['foo']),
  bar('ばー'),
  none('');

  const HogeType(this.type, {this.list = const []});
  final String type;
  final List<String> list;

  static HogeType fromIndex(int from) {
    if (0 <= from && from < HogeType.values.length) return HogeType.values[from];
    return HogeType.none;
  }

  static HogeType fromName(String? from) {
    return HogeType.values.firstWhere(
      (value) => value.name == from,
      orElse: () => HogeType.none,
    );
  }
}

void hg() {
  print(HogeType.fromName('hoge'));
  //HogeType.hoge
  print(HogeType.fromName('aa'));
  //HogeType.none

  print(HogeType.fromIndex(1));
  //HogeType.fuga
  print(HogeType.fromIndex(3));
  //HogeType.foo
}

テストコードも書きました

import 'package:flutter_test/flutter_test.dart';

import 'package:saiteki/enum/hoge_type.dart';

void main() {
  group('hogeをまとめた$HogeType >', () {
    group('$intを入力した際に$HogeTypeを出力するMethod: fromIndex(${HogeType.fromIndex}) >', () {
      test('(int 0)を入力した際に\${HogeType.hoge}を出力する', () {
        expect(HogeType.fromIndex(0), HogeType.hoge);
      });
      test('(int 5)を入力した際に\${HogeType.none}を出力する', () {
        expect(HogeType.fromIndex(5), HogeType.none);
      });
      test('下限の境界値の一つ外側の値(int -1)を入力した際に\${HogeType.none}を出力する', () {
        expect(HogeType.fromIndex(-1), HogeType.none);
      });
      test('上限の境界値の一つ外側の値(int 6)を入力した際に\${HogeType.none}を出力する', () {
        expect(HogeType.fromIndex(6), HogeType.none);
      });
    });
  });

  group('$Stringを入力した際に$HogeTypeを出力するMethod: fromName(${HogeType.fromName}) >', () {
    test('(String hoge)を入力した際に\${HogeType.hoge}を出力する', () {
      expect(HogeType.fromName('hoge'), HogeType.hoge);
    });
    test('(String none)を入力した際に\${HogeType.none}を出力する', () {
      expect(HogeType.fromName('none'), HogeType.none);
    });
    test('対応外文字列の(String hogehoge)を入力した際に\${HogeType.none}を出力する', () {
      expect(HogeType.fromName('hogehoge'), HogeType.none);
    });
    test('文字列ではない(String? null)を入力した際に\${HogeType.none}を出力する', () {
      expect(HogeType.fromName(null), HogeType.none);
    });
  });
}

おわり

2
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
2
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?