mirror of https://github.com/flutter/pinball.git
parent
e989f87978
commit
4bb2f25617
@ -1,17 +1,37 @@
|
|||||||
// ignore_for_file: public_member_api_docs
|
// ignore_for_file: public_member_api_docs
|
||||||
|
|
||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
|
||||||
part 'multiball_state.dart';
|
part 'multiball_state.dart';
|
||||||
|
|
||||||
class MultiballCubit extends Cubit<MultiballState> {
|
class MultiballCubit extends Cubit<MultiballState> {
|
||||||
MultiballCubit() : super(MultiballState.dimmed);
|
MultiballCubit() : super(MultiballState.initial());
|
||||||
|
|
||||||
void animate() {
|
void onAnimate() {
|
||||||
emit(MultiballState.lit);
|
emit(
|
||||||
|
state.copyWith(animationState: MultiballAnimationState.animated),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onBlinked() {
|
void onStop() {
|
||||||
emit(MultiballState.dimmed);
|
emit(
|
||||||
|
state.copyWith(animationState: MultiballAnimationState.stopped),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onBlink() {
|
||||||
|
switch (state.lightState) {
|
||||||
|
case MultiballLightState.lit:
|
||||||
|
emit(
|
||||||
|
state.copyWith(lightState: MultiballLightState.dimmed),
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case MultiballLightState.dimmed:
|
||||||
|
emit(
|
||||||
|
state.copyWith(lightState: MultiballLightState.lit),
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
// ignore_for_file: prefer_const_constructors
|
||||||
|
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:pinball_components/src/pinball_components.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
group('MultiballState', () {
|
||||||
|
test('supports value equality', () {
|
||||||
|
expect(
|
||||||
|
MultiballState(
|
||||||
|
animationState: MultiballAnimationState.stopped,
|
||||||
|
lightState: MultiballLightState.dimmed,
|
||||||
|
),
|
||||||
|
equals(
|
||||||
|
MultiballState(
|
||||||
|
animationState: MultiballAnimationState.stopped,
|
||||||
|
lightState: MultiballLightState.dimmed,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
group('constructor', () {
|
||||||
|
test('can be instantiated', () {
|
||||||
|
expect(
|
||||||
|
MultiballState(
|
||||||
|
animationState: MultiballAnimationState.stopped,
|
||||||
|
lightState: MultiballLightState.dimmed,
|
||||||
|
),
|
||||||
|
isNotNull,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
group('copyWith', () {
|
||||||
|
test(
|
||||||
|
'copies correctly '
|
||||||
|
'when no argument specified',
|
||||||
|
() {
|
||||||
|
final multiballState = MultiballState(
|
||||||
|
animationState: MultiballAnimationState.stopped,
|
||||||
|
lightState: MultiballLightState.dimmed,
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
multiballState.copyWith(),
|
||||||
|
equals(multiballState),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
test(
|
||||||
|
'copies correctly '
|
||||||
|
'when all arguments specified',
|
||||||
|
() {
|
||||||
|
final multiballState = MultiballState(
|
||||||
|
animationState: MultiballAnimationState.stopped,
|
||||||
|
lightState: MultiballLightState.dimmed,
|
||||||
|
);
|
||||||
|
final otherMultiballState = MultiballState(
|
||||||
|
animationState: MultiballAnimationState.animated,
|
||||||
|
lightState: MultiballLightState.lit,
|
||||||
|
);
|
||||||
|
expect(multiballState, isNot(equals(otherMultiballState)));
|
||||||
|
|
||||||
|
expect(
|
||||||
|
multiballState.copyWith(
|
||||||
|
animationState: MultiballAnimationState.animated,
|
||||||
|
lightState: MultiballLightState.lit,
|
||||||
|
),
|
||||||
|
equals(otherMultiballState),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in new issue