-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
tier_list_form_bloc.dart
31 lines (23 loc) · 958 Bytes
/
tier_list_form_bloc.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:shiori/domain/extensions/string_extensions.dart';
part 'tier_list_form_bloc.freezed.dart';
part 'tier_list_form_event.dart';
part 'tier_list_form_state.dart';
const _initialState = TierListFormState.loaded(name: '', isNameDirty: false, isNameValid: false);
class TierListFormBloc extends Bloc<TierListFormEvent, TierListFormState> {
TierListFormBloc() : super(_initialState);
static int nameMaxLength = 25;
@override
Stream<TierListFormState> mapEventToState(TierListFormEvent event) async* {
final s = event.map(
nameChanged: (e) {
final isValid = e.name.isNotNullEmptyOrWhitespace && e.name.length <= nameMaxLength;
final isDirty = e.name != state.name;
return state.copyWith.call(name: e.name, isNameDirty: isDirty, isNameValid: isValid);
},
);
yield s;
}
}