From 0eac420e83f8c427b5eb4cb0b7eeec2a6270bd53 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Thu, 3 Mar 2022 08:11:14 -0600 Subject: [PATCH 01/16] feat: add themes --- lib/character_themes/android_theme.dart | 9 +++++++++ lib/character_themes/character_theme.dart | 15 +++++++++++++++ lib/character_themes/character_themes.dart | 6 ++++++ lib/character_themes/dash_theme.dart | 9 +++++++++ lib/character_themes/dino_theme.dart | 9 +++++++++ lib/character_themes/sparky_theme.dart | 9 +++++++++ 6 files changed, 57 insertions(+) create mode 100644 lib/character_themes/android_theme.dart create mode 100644 lib/character_themes/character_theme.dart create mode 100644 lib/character_themes/character_themes.dart create mode 100644 lib/character_themes/dash_theme.dart create mode 100644 lib/character_themes/dino_theme.dart create mode 100644 lib/character_themes/sparky_theme.dart diff --git a/lib/character_themes/android_theme.dart b/lib/character_themes/android_theme.dart new file mode 100644 index 00000000..8c91d9e1 --- /dev/null +++ b/lib/character_themes/android_theme.dart @@ -0,0 +1,9 @@ +import 'package:flutter/material.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +class AndroidTheme extends CharacterTheme { + const AndroidTheme(); + + @override + Color get ballColor => Colors.green; +} diff --git a/lib/character_themes/character_theme.dart b/lib/character_themes/character_theme.dart new file mode 100644 index 00000000..d755a2c7 --- /dev/null +++ b/lib/character_themes/character_theme.dart @@ -0,0 +1,15 @@ +import 'package:equatable/equatable.dart'; +import 'package:flame/palette.dart'; + +/// {@template character_theme} +/// Template for creating character themes. +/// {@endtemplate} +abstract class CharacterTheme extends Equatable { + /// {@macro character_theme} + const CharacterTheme(); + + Color get ballColor; + + @override + List get props => []; +} diff --git a/lib/character_themes/character_themes.dart b/lib/character_themes/character_themes.dart new file mode 100644 index 00000000..21f1efd5 --- /dev/null +++ b/lib/character_themes/character_themes.dart @@ -0,0 +1,6 @@ +export 'android_theme.dart'; +export 'character_theme.dart'; +export 'cubit/theme_cubit.dart'; +export 'dash_theme.dart'; +export 'dino_theme.dart'; +export 'sparky_theme.dart'; diff --git a/lib/character_themes/dash_theme.dart b/lib/character_themes/dash_theme.dart new file mode 100644 index 00000000..caaf2bdf --- /dev/null +++ b/lib/character_themes/dash_theme.dart @@ -0,0 +1,9 @@ +import 'package:flutter/material.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +class DashTheme extends CharacterTheme { + const DashTheme(); + + @override + Color get ballColor => Colors.blue; +} diff --git a/lib/character_themes/dino_theme.dart b/lib/character_themes/dino_theme.dart new file mode 100644 index 00000000..27f76199 --- /dev/null +++ b/lib/character_themes/dino_theme.dart @@ -0,0 +1,9 @@ +import 'package:flutter/material.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +class DinoTheme extends CharacterTheme { + const DinoTheme(); + + @override + Color get ballColor => Colors.grey; +} diff --git a/lib/character_themes/sparky_theme.dart b/lib/character_themes/sparky_theme.dart new file mode 100644 index 00000000..63d8d241 --- /dev/null +++ b/lib/character_themes/sparky_theme.dart @@ -0,0 +1,9 @@ +import 'package:flutter/material.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +class SparkyTheme extends CharacterTheme { + const SparkyTheme(); + + @override + Color get ballColor => Colors.orange; +} From 5c095e8f9380a1c0111c9f741db1ece86e195033 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Thu, 3 Mar 2022 15:01:44 -0600 Subject: [PATCH 02/16] feat: add theme cubit --- lib/character_themes/character_theme.dart | 3 +++ lib/character_themes/cubit/theme_cubit.dart | 13 +++++++++++ lib/character_themes/cubit/theme_state.dart | 10 ++++++++ .../cubit/theme_cubit_test.dart | 23 +++++++++++++++++++ .../cubit/theme_state_test.dart | 19 +++++++++++++++ 5 files changed, 68 insertions(+) create mode 100644 lib/character_themes/cubit/theme_cubit.dart create mode 100644 lib/character_themes/cubit/theme_state.dart create mode 100644 test/character_themes/cubit/theme_cubit_test.dart create mode 100644 test/character_themes/cubit/theme_state_test.dart diff --git a/lib/character_themes/character_theme.dart b/lib/character_themes/character_theme.dart index d755a2c7..459ab69a 100644 --- a/lib/character_themes/character_theme.dart +++ b/lib/character_themes/character_theme.dart @@ -3,6 +3,9 @@ import 'package:flame/palette.dart'; /// {@template character_theme} /// Template for creating character themes. +/// +/// Any character specific game pieces should have a getter specified here so +/// their corresponding assets can be retrieved for the game. /// {@endtemplate} abstract class CharacterTheme extends Equatable { /// {@macro character_theme} diff --git a/lib/character_themes/cubit/theme_cubit.dart b/lib/character_themes/cubit/theme_cubit.dart new file mode 100644 index 00000000..ae60877e --- /dev/null +++ b/lib/character_themes/cubit/theme_cubit.dart @@ -0,0 +1,13 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +part 'theme_state.dart'; + +class ThemeCubit extends Cubit { + ThemeCubit() : super(const ThemeState(DashTheme())); + + void themeSelected(CharacterTheme theme) { + emit(ThemeState(theme)); + } +} diff --git a/lib/character_themes/cubit/theme_state.dart b/lib/character_themes/cubit/theme_state.dart new file mode 100644 index 00000000..de15b437 --- /dev/null +++ b/lib/character_themes/cubit/theme_state.dart @@ -0,0 +1,10 @@ +part of 'theme_cubit.dart'; + +class ThemeState extends Equatable { + const ThemeState(this.theme); + + final CharacterTheme theme; + + @override + List get props => [theme]; +} diff --git a/test/character_themes/cubit/theme_cubit_test.dart b/test/character_themes/cubit/theme_cubit_test.dart new file mode 100644 index 00000000..fda2b7cd --- /dev/null +++ b/test/character_themes/cubit/theme_cubit_test.dart @@ -0,0 +1,23 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +void main() { + group('ThemeCubit', () { + test('initial state has Dash theme', () { + final themeCubit = ThemeCubit(); + expect(themeCubit.state.theme, equals(const DashTheme())); + }); + + group('themeSelected', () { + blocTest( + 'emits selected theme', + build: ThemeCubit.new, + act: (bloc) => bloc.themeSelected(const SparkyTheme()), + expect: () => [ + const ThemeState(SparkyTheme()), + ], + ); + }); + }); +} diff --git a/test/character_themes/cubit/theme_state_test.dart b/test/character_themes/cubit/theme_state_test.dart new file mode 100644 index 00000000..0161dc10 --- /dev/null +++ b/test/character_themes/cubit/theme_state_test.dart @@ -0,0 +1,19 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +void main() { + group('ThemeState', () { + test('can be instantiated', () { + expect(const ThemeState(DashTheme()), isNotNull); + }); + + test('supports value equality', () { + expect( + ThemeState(DashTheme()), + equals(const ThemeState(DashTheme())), + ); + }); + }); +} From 5a44f0abf328aced22e66fbcfaf97e22e8e31507 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Thu, 3 Mar 2022 15:07:29 -0600 Subject: [PATCH 03/16] test: character themes --- test/character_themes/android_theme_test.dart | 21 +++++++++++++++++++ test/character_themes/dash_theme_test.dart | 21 +++++++++++++++++++ test/character_themes/dino_theme_test.dart | 21 +++++++++++++++++++ test/character_themes/sparky_theme_test.dart | 21 +++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 test/character_themes/android_theme_test.dart create mode 100644 test/character_themes/dash_theme_test.dart create mode 100644 test/character_themes/dino_theme_test.dart create mode 100644 test/character_themes/sparky_theme_test.dart diff --git a/test/character_themes/android_theme_test.dart b/test/character_themes/android_theme_test.dart new file mode 100644 index 00000000..7a5bf565 --- /dev/null +++ b/test/character_themes/android_theme_test.dart @@ -0,0 +1,21 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +void main() { + group('AndroidTheme', () { + test('can be instantiated', () { + expect(AndroidTheme(), isNotNull); + }); + + test('supports value equality', () { + expect(AndroidTheme(), equals(AndroidTheme())); + }); + + test('ballColor is correct', () { + expect(AndroidTheme().ballColor, equals(Colors.green)); + }); + }); +} diff --git a/test/character_themes/dash_theme_test.dart b/test/character_themes/dash_theme_test.dart new file mode 100644 index 00000000..6d06a70a --- /dev/null +++ b/test/character_themes/dash_theme_test.dart @@ -0,0 +1,21 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +void main() { + group('DashTheme', () { + test('can be instantiated', () { + expect(DashTheme(), isNotNull); + }); + + test('supports value equality', () { + expect(DashTheme(), equals(DashTheme())); + }); + + test('ballColor is correct', () { + expect(DashTheme().ballColor, equals(Colors.blue)); + }); + }); +} diff --git a/test/character_themes/dino_theme_test.dart b/test/character_themes/dino_theme_test.dart new file mode 100644 index 00000000..0c0f83e8 --- /dev/null +++ b/test/character_themes/dino_theme_test.dart @@ -0,0 +1,21 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +void main() { + group('DinoTheme', () { + test('can be instantiated', () { + expect(DinoTheme(), isNotNull); + }); + + test('supports value equality', () { + expect(DinoTheme(), equals(DinoTheme())); + }); + + test('ballColor is correct', () { + expect(DinoTheme().ballColor, equals(Colors.grey)); + }); + }); +} diff --git a/test/character_themes/sparky_theme_test.dart b/test/character_themes/sparky_theme_test.dart new file mode 100644 index 00000000..a57c8969 --- /dev/null +++ b/test/character_themes/sparky_theme_test.dart @@ -0,0 +1,21 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/character_themes/character_themes.dart'; + +void main() { + group('SparkyTheme', () { + test('can be instantiated', () { + expect(SparkyTheme(), isNotNull); + }); + + test('supports value equality', () { + expect(SparkyTheme(), equals(SparkyTheme())); + }); + + test('ballColor is correct', () { + expect(SparkyTheme().ballColor, equals(Colors.orange)); + }); + }); +} From 8f3fc4b248ed3a98c55b9005acd8442873d0ebfb Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Thu, 3 Mar 2022 15:31:24 -0600 Subject: [PATCH 04/16] test: remove grouping --- .../cubit/theme_cubit_test.dart | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/test/character_themes/cubit/theme_cubit_test.dart b/test/character_themes/cubit/theme_cubit_test.dart index fda2b7cd..5dacba87 100644 --- a/test/character_themes/cubit/theme_cubit_test.dart +++ b/test/character_themes/cubit/theme_cubit_test.dart @@ -9,15 +9,13 @@ void main() { expect(themeCubit.state.theme, equals(const DashTheme())); }); - group('themeSelected', () { - blocTest( - 'emits selected theme', - build: ThemeCubit.new, - act: (bloc) => bloc.themeSelected(const SparkyTheme()), - expect: () => [ - const ThemeState(SparkyTheme()), - ], - ); - }); + blocTest( + 'themeSelected emits selected theme', + build: ThemeCubit.new, + act: (bloc) => bloc.themeSelected(const SparkyTheme()), + expect: () => [ + const ThemeState(SparkyTheme()), + ], + ); }); } From 0e98a74b176472c29e1bafc3cf86503e912028a2 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Fri, 4 Mar 2022 10:17:12 -0600 Subject: [PATCH 05/16] refactor: move themes to package --- lib/character_themes/android_theme.dart | 9 ----- lib/character_themes/character_theme.dart | 18 --------- lib/character_themes/dash_theme.dart | 9 ----- lib/character_themes/dino_theme.dart | 9 ----- lib/character_themes/sparky_theme.dart | 9 ----- .../cubit/theme_cubit.dart | 4 +- .../cubit/theme_state.dart | 2 +- lib/theme/theme.dart | 1 + packages/pinball_theme/.gitignore | 39 +++++++++++++++++++ packages/pinball_theme/README.md | 11 ++++++ packages/pinball_theme/analysis_options.yaml | 1 + packages/pinball_theme/lib/pinball_theme.dart | 4 ++ .../pinball_theme/lib/src/pinball_theme.dart | 19 +++++++++ .../lib/src/themes/android_theme.dart | 13 +++++++ .../lib/src/themes/dash_theme.dart | 13 +++++++ .../lib/src/themes/dino_theme.dart | 13 +++++++ .../lib/src/themes/sparky_theme.dart | 13 +++++++ .../pinball_theme/lib/src/themes/themes.dart | 2 - packages/pinball_theme/pubspec.yaml | 17 ++++++++ .../test/src/themes}/android_theme_test.dart | 2 +- .../test/src/themes}/dash_theme_test.dart | 2 +- .../test/src/themes}/dino_theme_test.dart | 2 +- .../test/src/themes}/sparky_theme_test.dart | 2 +- pubspec.lock | 7 ++++ pubspec.yaml | 2 + .../cubit/theme_cubit_test.dart | 3 +- .../cubit/theme_state_test.dart | 3 +- 27 files changed, 164 insertions(+), 65 deletions(-) delete mode 100644 lib/character_themes/android_theme.dart delete mode 100644 lib/character_themes/character_theme.dart delete mode 100644 lib/character_themes/dash_theme.dart delete mode 100644 lib/character_themes/dino_theme.dart delete mode 100644 lib/character_themes/sparky_theme.dart rename lib/{character_themes => theme}/cubit/theme_cubit.dart (68%) rename lib/{character_themes => theme}/cubit/theme_state.dart (83%) create mode 100644 lib/theme/theme.dart create mode 100644 packages/pinball_theme/.gitignore create mode 100644 packages/pinball_theme/README.md create mode 100644 packages/pinball_theme/analysis_options.yaml create mode 100644 packages/pinball_theme/lib/pinball_theme.dart create mode 100644 packages/pinball_theme/lib/src/pinball_theme.dart create mode 100644 packages/pinball_theme/lib/src/themes/android_theme.dart create mode 100644 packages/pinball_theme/lib/src/themes/dash_theme.dart create mode 100644 packages/pinball_theme/lib/src/themes/dino_theme.dart create mode 100644 packages/pinball_theme/lib/src/themes/sparky_theme.dart rename lib/character_themes/character_themes.dart => packages/pinball_theme/lib/src/themes/themes.dart (63%) create mode 100644 packages/pinball_theme/pubspec.yaml rename {test/character_themes => packages/pinball_theme/test/src/themes}/android_theme_test.dart (88%) rename {test/character_themes => packages/pinball_theme/test/src/themes}/dash_theme_test.dart (87%) rename {test/character_themes => packages/pinball_theme/test/src/themes}/dino_theme_test.dart (87%) rename {test/character_themes => packages/pinball_theme/test/src/themes}/sparky_theme_test.dart (88%) rename test/{character_themes => theme}/cubit/theme_cubit_test.dart (85%) rename test/{character_themes => theme}/cubit/theme_state_test.dart (80%) diff --git a/lib/character_themes/android_theme.dart b/lib/character_themes/android_theme.dart deleted file mode 100644 index 8c91d9e1..00000000 --- a/lib/character_themes/android_theme.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:pinball/character_themes/character_themes.dart'; - -class AndroidTheme extends CharacterTheme { - const AndroidTheme(); - - @override - Color get ballColor => Colors.green; -} diff --git a/lib/character_themes/character_theme.dart b/lib/character_themes/character_theme.dart deleted file mode 100644 index 459ab69a..00000000 --- a/lib/character_themes/character_theme.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:flame/palette.dart'; - -/// {@template character_theme} -/// Template for creating character themes. -/// -/// Any character specific game pieces should have a getter specified here so -/// their corresponding assets can be retrieved for the game. -/// {@endtemplate} -abstract class CharacterTheme extends Equatable { - /// {@macro character_theme} - const CharacterTheme(); - - Color get ballColor; - - @override - List get props => []; -} diff --git a/lib/character_themes/dash_theme.dart b/lib/character_themes/dash_theme.dart deleted file mode 100644 index caaf2bdf..00000000 --- a/lib/character_themes/dash_theme.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:pinball/character_themes/character_themes.dart'; - -class DashTheme extends CharacterTheme { - const DashTheme(); - - @override - Color get ballColor => Colors.blue; -} diff --git a/lib/character_themes/dino_theme.dart b/lib/character_themes/dino_theme.dart deleted file mode 100644 index 27f76199..00000000 --- a/lib/character_themes/dino_theme.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:pinball/character_themes/character_themes.dart'; - -class DinoTheme extends CharacterTheme { - const DinoTheme(); - - @override - Color get ballColor => Colors.grey; -} diff --git a/lib/character_themes/sparky_theme.dart b/lib/character_themes/sparky_theme.dart deleted file mode 100644 index 63d8d241..00000000 --- a/lib/character_themes/sparky_theme.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:pinball/character_themes/character_themes.dart'; - -class SparkyTheme extends CharacterTheme { - const SparkyTheme(); - - @override - Color get ballColor => Colors.orange; -} diff --git a/lib/character_themes/cubit/theme_cubit.dart b/lib/theme/cubit/theme_cubit.dart similarity index 68% rename from lib/character_themes/cubit/theme_cubit.dart rename to lib/theme/cubit/theme_cubit.dart index ae60877e..080d5f5e 100644 --- a/lib/character_themes/cubit/theme_cubit.dart +++ b/lib/theme/cubit/theme_cubit.dart @@ -1,13 +1,13 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball_theme/pinball_theme.dart'; part 'theme_state.dart'; class ThemeCubit extends Cubit { ThemeCubit() : super(const ThemeState(DashTheme())); - void themeSelected(CharacterTheme theme) { + void themeSelected(PinballTheme theme) { emit(ThemeState(theme)); } } diff --git a/lib/character_themes/cubit/theme_state.dart b/lib/theme/cubit/theme_state.dart similarity index 83% rename from lib/character_themes/cubit/theme_state.dart rename to lib/theme/cubit/theme_state.dart index de15b437..71491960 100644 --- a/lib/character_themes/cubit/theme_state.dart +++ b/lib/theme/cubit/theme_state.dart @@ -3,7 +3,7 @@ part of 'theme_cubit.dart'; class ThemeState extends Equatable { const ThemeState(this.theme); - final CharacterTheme theme; + final PinballTheme theme; @override List get props => [theme]; diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart new file mode 100644 index 00000000..fcf5d9ee --- /dev/null +++ b/lib/theme/theme.dart @@ -0,0 +1 @@ +export 'cubit/theme_cubit.dart'; diff --git a/packages/pinball_theme/.gitignore b/packages/pinball_theme/.gitignore new file mode 100644 index 00000000..d6130351 --- /dev/null +++ b/packages/pinball_theme/.gitignore @@ -0,0 +1,39 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# VSCode related +.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json diff --git a/packages/pinball_theme/README.md b/packages/pinball_theme/README.md new file mode 100644 index 00000000..e9730e1b --- /dev/null +++ b/packages/pinball_theme/README.md @@ -0,0 +1,11 @@ +# pinball_theme + +[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] +[![License: MIT][license_badge]][license_link] + +Package containing themes for pinball game. + +[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg +[license_link]: https://opensource.org/licenses/MIT +[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg +[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis \ No newline at end of file diff --git a/packages/pinball_theme/analysis_options.yaml b/packages/pinball_theme/analysis_options.yaml new file mode 100644 index 00000000..3742fc3d --- /dev/null +++ b/packages/pinball_theme/analysis_options.yaml @@ -0,0 +1 @@ +include: package:very_good_analysis/analysis_options.2.4.0.yaml \ No newline at end of file diff --git a/packages/pinball_theme/lib/pinball_theme.dart b/packages/pinball_theme/lib/pinball_theme.dart new file mode 100644 index 00000000..0206fa7b --- /dev/null +++ b/packages/pinball_theme/lib/pinball_theme.dart @@ -0,0 +1,4 @@ +library pinball_theme; + +export 'src/pinball_theme.dart'; +export 'src/themes/themes.dart'; diff --git a/packages/pinball_theme/lib/src/pinball_theme.dart b/packages/pinball_theme/lib/src/pinball_theme.dart new file mode 100644 index 00000000..f8605708 --- /dev/null +++ b/packages/pinball_theme/lib/src/pinball_theme.dart @@ -0,0 +1,19 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; + +/// {@template pinball_theme} +/// Base class for creating pinball themes. +/// +/// Character specific game components should have a getter specified here to +/// load their corresponding assets for the game. +/// {@endtemplate} +abstract class PinballTheme extends Equatable { + /// {@macro pinball_theme} + const PinballTheme(); + + /// Ball color for this theme. + Color get ballColor; + + @override + List get props => []; +} diff --git a/packages/pinball_theme/lib/src/themes/android_theme.dart b/packages/pinball_theme/lib/src/themes/android_theme.dart new file mode 100644 index 00000000..bf29da27 --- /dev/null +++ b/packages/pinball_theme/lib/src/themes/android_theme.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +/// {@template android_theme} +/// Class defining Android theme assets and attributes. +/// {@endtemplate} +class AndroidTheme extends PinballTheme { + /// {@macro android_theme} + const AndroidTheme(); + + @override + Color get ballColor => Colors.green; +} diff --git a/packages/pinball_theme/lib/src/themes/dash_theme.dart b/packages/pinball_theme/lib/src/themes/dash_theme.dart new file mode 100644 index 00000000..34faac9c --- /dev/null +++ b/packages/pinball_theme/lib/src/themes/dash_theme.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +/// {@template dash_theme} +/// Class defining Dash theme assets and attributes. +/// {@endtemplate} +class DashTheme extends PinballTheme { + /// {@macro dash_theme} + const DashTheme(); + + @override + Color get ballColor => Colors.blue; +} diff --git a/packages/pinball_theme/lib/src/themes/dino_theme.dart b/packages/pinball_theme/lib/src/themes/dino_theme.dart new file mode 100644 index 00000000..1af5b5c8 --- /dev/null +++ b/packages/pinball_theme/lib/src/themes/dino_theme.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +/// {@template dino_theme} +/// Class defining Dino theme assets and attributes. +/// {@endtemplate} +class DinoTheme extends PinballTheme { + /// {@macro dino_theme} + const DinoTheme(); + + @override + Color get ballColor => Colors.grey; +} diff --git a/packages/pinball_theme/lib/src/themes/sparky_theme.dart b/packages/pinball_theme/lib/src/themes/sparky_theme.dart new file mode 100644 index 00000000..75ddd3b7 --- /dev/null +++ b/packages/pinball_theme/lib/src/themes/sparky_theme.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +/// {@template sparky_theme} +/// Class defining Sparky theme assets and attributes. +/// {@endtemplate} +class SparkyTheme extends PinballTheme { + /// {@macro sparky_theme} + const SparkyTheme(); + + @override + Color get ballColor => Colors.orange; +} diff --git a/lib/character_themes/character_themes.dart b/packages/pinball_theme/lib/src/themes/themes.dart similarity index 63% rename from lib/character_themes/character_themes.dart rename to packages/pinball_theme/lib/src/themes/themes.dart index 21f1efd5..895e7c8d 100644 --- a/lib/character_themes/character_themes.dart +++ b/packages/pinball_theme/lib/src/themes/themes.dart @@ -1,6 +1,4 @@ export 'android_theme.dart'; -export 'character_theme.dart'; -export 'cubit/theme_cubit.dart'; export 'dash_theme.dart'; export 'dino_theme.dart'; export 'sparky_theme.dart'; diff --git a/packages/pinball_theme/pubspec.yaml b/packages/pinball_theme/pubspec.yaml new file mode 100644 index 00000000..e9b3f215 --- /dev/null +++ b/packages/pinball_theme/pubspec.yaml @@ -0,0 +1,17 @@ +name: pinball_theme +description: Package containing themes for pinball game. +version: 1.0.0+1 +publish_to: none + +environment: + sdk: ">=2.16.0 <3.0.0" + +dependencies: + equatable: ^2.0.3 + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + very_good_analysis: ^2.4.0 \ No newline at end of file diff --git a/test/character_themes/android_theme_test.dart b/packages/pinball_theme/test/src/themes/android_theme_test.dart similarity index 88% rename from test/character_themes/android_theme_test.dart rename to packages/pinball_theme/test/src/themes/android_theme_test.dart index 7a5bf565..a6148042 100644 --- a/test/character_themes/android_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/android_theme_test.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball_theme/pinball_theme.dart'; void main() { group('AndroidTheme', () { diff --git a/test/character_themes/dash_theme_test.dart b/packages/pinball_theme/test/src/themes/dash_theme_test.dart similarity index 87% rename from test/character_themes/dash_theme_test.dart rename to packages/pinball_theme/test/src/themes/dash_theme_test.dart index 6d06a70a..0d5c8293 100644 --- a/test/character_themes/dash_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/dash_theme_test.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball_theme/pinball_theme.dart'; void main() { group('DashTheme', () { diff --git a/test/character_themes/dino_theme_test.dart b/packages/pinball_theme/test/src/themes/dino_theme_test.dart similarity index 87% rename from test/character_themes/dino_theme_test.dart rename to packages/pinball_theme/test/src/themes/dino_theme_test.dart index 0c0f83e8..6efd8cbd 100644 --- a/test/character_themes/dino_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/dino_theme_test.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball_theme/pinball_theme.dart'; void main() { group('DinoTheme', () { diff --git a/test/character_themes/sparky_theme_test.dart b/packages/pinball_theme/test/src/themes/sparky_theme_test.dart similarity index 88% rename from test/character_themes/sparky_theme_test.dart rename to packages/pinball_theme/test/src/themes/sparky_theme_test.dart index a57c8969..513ca219 100644 --- a/test/character_themes/sparky_theme_test.dart +++ b/packages/pinball_theme/test/src/themes/sparky_theme_test.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball_theme/pinball_theme.dart'; void main() { group('SparkyTheme', () { diff --git a/pubspec.lock b/pubspec.lock index e218776d..7bf08da4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -324,6 +324,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" + pinball_theme: + dependency: "direct main" + description: + path: "packages/pinball_theme" + relative: true + source: path + version: "1.0.0+1" pool: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 5d708073..6c3bd98e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,6 +18,8 @@ dependencies: flutter_localizations: sdk: flutter intl: ^0.17.0 + pinball_theme: + path: packages/pinball_theme dev_dependencies: bloc_test: ^9.0.2 diff --git a/test/character_themes/cubit/theme_cubit_test.dart b/test/theme/cubit/theme_cubit_test.dart similarity index 85% rename from test/character_themes/cubit/theme_cubit_test.dart rename to test/theme/cubit/theme_cubit_test.dart index 5dacba87..59aecd37 100644 --- a/test/character_themes/cubit/theme_cubit_test.dart +++ b/test/theme/cubit/theme_cubit_test.dart @@ -1,6 +1,7 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball/theme/theme.dart'; +import 'package:pinball_theme/pinball_theme.dart'; void main() { group('ThemeCubit', () { diff --git a/test/character_themes/cubit/theme_state_test.dart b/test/theme/cubit/theme_state_test.dart similarity index 80% rename from test/character_themes/cubit/theme_state_test.dart rename to test/theme/cubit/theme_state_test.dart index 0161dc10..e89abe01 100644 --- a/test/character_themes/cubit/theme_state_test.dart +++ b/test/theme/cubit/theme_state_test.dart @@ -1,7 +1,8 @@ // ignore_for_file: prefer_const_constructors import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/character_themes/character_themes.dart'; +import 'package:pinball/theme/theme.dart'; +import 'package:pinball_theme/pinball_theme.dart'; void main() { group('ThemeState', () { From 5d583fb07eb2c25bd09c834eead72c1188405b1d Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Fri, 4 Mar 2022 10:21:55 -0600 Subject: [PATCH 06/16] chore: add workflow --- .github/workflows/pinball_theme.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/pinball_theme.yaml diff --git a/.github/workflows/pinball_theme.yaml b/.github/workflows/pinball_theme.yaml new file mode 100644 index 00000000..268fe535 --- /dev/null +++ b/.github/workflows/pinball_theme.yaml @@ -0,0 +1,18 @@ +name: pinball_theme + +on: + push: + paths: + - "packages/pinball_theme/**" + - ".github/workflows/pinball_theme.yaml" + + pull_request: + paths: + - "packages/pinball_theme/**" + - ".github/workflows/pinball_theme.yaml" + +jobs: + build: + uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_package.yml@v1 + with: + working_directory: packages/pinball_theme \ No newline at end of file From 7421acf4a027248907d364cb0d44bb6174c86be2 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Fri, 4 Mar 2022 10:27:05 -0600 Subject: [PATCH 07/16] fix: workflow --- .github/workflows/pinball_theme.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pinball_theme.yaml b/.github/workflows/pinball_theme.yaml index 268fe535..f6fa14aa 100644 --- a/.github/workflows/pinball_theme.yaml +++ b/.github/workflows/pinball_theme.yaml @@ -13,6 +13,6 @@ on: jobs: build: - uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_package.yml@v1 + uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 with: working_directory: packages/pinball_theme \ No newline at end of file From f0db7c720d8c1e848b8ef7a4182b0876d7a10928 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Fri, 4 Mar 2022 11:16:13 -0600 Subject: [PATCH 08/16] docs: character themes update --- packages/pinball_theme/lib/src/themes/android_theme.dart | 2 +- packages/pinball_theme/lib/src/themes/dash_theme.dart | 2 +- packages/pinball_theme/lib/src/themes/dino_theme.dart | 2 +- packages/pinball_theme/lib/src/themes/sparky_theme.dart | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/pinball_theme/lib/src/themes/android_theme.dart b/packages/pinball_theme/lib/src/themes/android_theme.dart index bf29da27..3b605411 100644 --- a/packages/pinball_theme/lib/src/themes/android_theme.dart +++ b/packages/pinball_theme/lib/src/themes/android_theme.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template android_theme} -/// Class defining Android theme assets and attributes. +/// Defines Android theme assets and attributes. /// {@endtemplate} class AndroidTheme extends PinballTheme { /// {@macro android_theme} diff --git a/packages/pinball_theme/lib/src/themes/dash_theme.dart b/packages/pinball_theme/lib/src/themes/dash_theme.dart index 34faac9c..fd0cdfa1 100644 --- a/packages/pinball_theme/lib/src/themes/dash_theme.dart +++ b/packages/pinball_theme/lib/src/themes/dash_theme.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template dash_theme} -/// Class defining Dash theme assets and attributes. +/// Defines Dash theme assets and attributes. /// {@endtemplate} class DashTheme extends PinballTheme { /// {@macro dash_theme} diff --git a/packages/pinball_theme/lib/src/themes/dino_theme.dart b/packages/pinball_theme/lib/src/themes/dino_theme.dart index 1af5b5c8..9337ddde 100644 --- a/packages/pinball_theme/lib/src/themes/dino_theme.dart +++ b/packages/pinball_theme/lib/src/themes/dino_theme.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template dino_theme} -/// Class defining Dino theme assets and attributes. +/// Defines Dino theme assets and attributes. /// {@endtemplate} class DinoTheme extends PinballTheme { /// {@macro dino_theme} diff --git a/packages/pinball_theme/lib/src/themes/sparky_theme.dart b/packages/pinball_theme/lib/src/themes/sparky_theme.dart index 75ddd3b7..d2cecf47 100644 --- a/packages/pinball_theme/lib/src/themes/sparky_theme.dart +++ b/packages/pinball_theme/lib/src/themes/sparky_theme.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template sparky_theme} -/// Class defining Sparky theme assets and attributes. +/// Defines Sparky theme assets and attributes. /// {@endtemplate} class SparkyTheme extends PinballTheme { /// {@macro sparky_theme} From ca18de6172c94bc49c242f58f78f8174faacc74a Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Fri, 4 Mar 2022 12:15:32 -0600 Subject: [PATCH 09/16] refactor: one theme for entire game --- lib/theme/cubit/theme_cubit.dart | 6 ++-- lib/theme/cubit/theme_state.dart | 3 ++ .../pinball_theme/lib/src/pinball_theme.dart | 20 +++++++------ .../lib/src/themes/android_theme.dart | 4 +-- .../lib/src/themes/character_theme.dart | 19 +++++++++++++ .../lib/src/themes/dash_theme.dart | 4 +-- .../lib/src/themes/dino_theme.dart | 4 +-- .../lib/src/themes/sparky_theme.dart | 4 +-- .../pinball_theme/lib/src/themes/themes.dart | 1 + .../test/src/pinball_theme_test.dart | 28 +++++++++++++++++++ test/theme/cubit/theme_cubit_test.dart | 10 +++---- test/theme/cubit/theme_state_test.dart | 7 ++--- 12 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 packages/pinball_theme/lib/src/themes/character_theme.dart create mode 100644 packages/pinball_theme/test/src/pinball_theme_test.dart diff --git a/lib/theme/cubit/theme_cubit.dart b/lib/theme/cubit/theme_cubit.dart index 080d5f5e..7ba79e59 100644 --- a/lib/theme/cubit/theme_cubit.dart +++ b/lib/theme/cubit/theme_cubit.dart @@ -5,9 +5,9 @@ import 'package:pinball_theme/pinball_theme.dart'; part 'theme_state.dart'; class ThemeCubit extends Cubit { - ThemeCubit() : super(const ThemeState(DashTheme())); + ThemeCubit() : super(const ThemeState.initial()); - void themeSelected(PinballTheme theme) { - emit(ThemeState(theme)); + void characterSelected(CharacterTheme characterTheme) { + emit(ThemeState(PinballTheme(characterTheme: characterTheme))); } } diff --git a/lib/theme/cubit/theme_state.dart b/lib/theme/cubit/theme_state.dart index 71491960..13b3ea5f 100644 --- a/lib/theme/cubit/theme_state.dart +++ b/lib/theme/cubit/theme_state.dart @@ -3,6 +3,9 @@ part of 'theme_cubit.dart'; class ThemeState extends Equatable { const ThemeState(this.theme); + const ThemeState.initial() + : theme = const PinballTheme(characterTheme: DashTheme()); + final PinballTheme theme; @override diff --git a/packages/pinball_theme/lib/src/pinball_theme.dart b/packages/pinball_theme/lib/src/pinball_theme.dart index f8605708..b4c404e5 100644 --- a/packages/pinball_theme/lib/src/pinball_theme.dart +++ b/packages/pinball_theme/lib/src/pinball_theme.dart @@ -1,18 +1,22 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter/material.dart'; +import 'package:pinball_theme/pinball_theme.dart'; /// {@template pinball_theme} -/// Base class for creating pinball themes. +/// Defines all theme assets and attributes. /// -/// Character specific game components should have a getter specified here to -/// load their corresponding assets for the game. +/// Game components should have a getter specified here to load their +/// corresponding assets for the game. /// {@endtemplate} -abstract class PinballTheme extends Equatable { +class PinballTheme extends Equatable { /// {@macro pinball_theme} - const PinballTheme(); + const PinballTheme({ + required CharacterTheme characterTheme, + }) : _characterTheme = characterTheme; - /// Ball color for this theme. - Color get ballColor; + final CharacterTheme _characterTheme; + + /// [CharacterTheme] for the chosen character. + CharacterTheme get characterTheme => _characterTheme; @override List get props => []; diff --git a/packages/pinball_theme/lib/src/themes/android_theme.dart b/packages/pinball_theme/lib/src/themes/android_theme.dart index 3b605411..59c16bd9 100644 --- a/packages/pinball_theme/lib/src/themes/android_theme.dart +++ b/packages/pinball_theme/lib/src/themes/android_theme.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template android_theme} -/// Defines Android theme assets and attributes. +/// Defines Android character theme assets and attributes. /// {@endtemplate} -class AndroidTheme extends PinballTheme { +class AndroidTheme extends CharacterTheme { /// {@macro android_theme} const AndroidTheme(); diff --git a/packages/pinball_theme/lib/src/themes/character_theme.dart b/packages/pinball_theme/lib/src/themes/character_theme.dart new file mode 100644 index 00000000..50b6b557 --- /dev/null +++ b/packages/pinball_theme/lib/src/themes/character_theme.dart @@ -0,0 +1,19 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; + +/// {@template character_theme} +/// Base class for creating character themes. +/// +/// Character specific game components should have a getter specified here to +/// load their corresponding assets for the game. +/// {@endtemplate} +abstract class CharacterTheme extends Equatable { + /// {@macro character_theme} + const CharacterTheme(); + + /// Ball color for this theme. + Color get ballColor; + + @override + List get props => []; +} diff --git a/packages/pinball_theme/lib/src/themes/dash_theme.dart b/packages/pinball_theme/lib/src/themes/dash_theme.dart index fd0cdfa1..e4875a11 100644 --- a/packages/pinball_theme/lib/src/themes/dash_theme.dart +++ b/packages/pinball_theme/lib/src/themes/dash_theme.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template dash_theme} -/// Defines Dash theme assets and attributes. +/// Defines Dash character theme assets and attributes. /// {@endtemplate} -class DashTheme extends PinballTheme { +class DashTheme extends CharacterTheme { /// {@macro dash_theme} const DashTheme(); diff --git a/packages/pinball_theme/lib/src/themes/dino_theme.dart b/packages/pinball_theme/lib/src/themes/dino_theme.dart index 9337ddde..07776771 100644 --- a/packages/pinball_theme/lib/src/themes/dino_theme.dart +++ b/packages/pinball_theme/lib/src/themes/dino_theme.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template dino_theme} -/// Defines Dino theme assets and attributes. +/// Defines Dino character theme assets and attributes. /// {@endtemplate} -class DinoTheme extends PinballTheme { +class DinoTheme extends CharacterTheme { /// {@macro dino_theme} const DinoTheme(); diff --git a/packages/pinball_theme/lib/src/themes/sparky_theme.dart b/packages/pinball_theme/lib/src/themes/sparky_theme.dart index d2cecf47..5264bad6 100644 --- a/packages/pinball_theme/lib/src/themes/sparky_theme.dart +++ b/packages/pinball_theme/lib/src/themes/sparky_theme.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:pinball_theme/pinball_theme.dart'; /// {@template sparky_theme} -/// Defines Sparky theme assets and attributes. +/// Defines Sparky character theme assets and attributes. /// {@endtemplate} -class SparkyTheme extends PinballTheme { +class SparkyTheme extends CharacterTheme { /// {@macro sparky_theme} const SparkyTheme(); diff --git a/packages/pinball_theme/lib/src/themes/themes.dart b/packages/pinball_theme/lib/src/themes/themes.dart index 895e7c8d..d4062a4f 100644 --- a/packages/pinball_theme/lib/src/themes/themes.dart +++ b/packages/pinball_theme/lib/src/themes/themes.dart @@ -1,4 +1,5 @@ export 'android_theme.dart'; +export 'character_theme.dart'; export 'dash_theme.dart'; export 'dino_theme.dart'; export 'sparky_theme.dart'; diff --git a/packages/pinball_theme/test/src/pinball_theme_test.dart b/packages/pinball_theme/test/src/pinball_theme_test.dart new file mode 100644 index 00000000..899eec64 --- /dev/null +++ b/packages/pinball_theme/test/src/pinball_theme_test.dart @@ -0,0 +1,28 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +void main() { + group('PinballTheme', () { + const characterTheme = SparkyTheme(); + + test('can be instantiated', () { + expect(PinballTheme(characterTheme: characterTheme), isNotNull); + }); + + test('supports value equality', () { + expect( + PinballTheme(characterTheme: characterTheme), + equals(PinballTheme(characterTheme: characterTheme)), + ); + }); + + test('characterTheme is correct', () { + expect( + PinballTheme(characterTheme: characterTheme).characterTheme, + equals(characterTheme), + ); + }); + }); +} diff --git a/test/theme/cubit/theme_cubit_test.dart b/test/theme/cubit/theme_cubit_test.dart index 59aecd37..1f2d24e0 100644 --- a/test/theme/cubit/theme_cubit_test.dart +++ b/test/theme/cubit/theme_cubit_test.dart @@ -5,17 +5,17 @@ import 'package:pinball_theme/pinball_theme.dart'; void main() { group('ThemeCubit', () { - test('initial state has Dash theme', () { + test('initial state has Dash character theme', () { final themeCubit = ThemeCubit(); - expect(themeCubit.state.theme, equals(const DashTheme())); + expect(themeCubit.state.theme.characterTheme, equals(const DashTheme())); }); blocTest( - 'themeSelected emits selected theme', + 'charcterSelected emits selected character theme', build: ThemeCubit.new, - act: (bloc) => bloc.themeSelected(const SparkyTheme()), + act: (bloc) => bloc.characterSelected(const SparkyTheme()), expect: () => [ - const ThemeState(SparkyTheme()), + const ThemeState(PinballTheme(characterTheme: SparkyTheme())), ], ); }); diff --git a/test/theme/cubit/theme_state_test.dart b/test/theme/cubit/theme_state_test.dart index e89abe01..49a2a387 100644 --- a/test/theme/cubit/theme_state_test.dart +++ b/test/theme/cubit/theme_state_test.dart @@ -2,18 +2,17 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:pinball/theme/theme.dart'; -import 'package:pinball_theme/pinball_theme.dart'; void main() { group('ThemeState', () { test('can be instantiated', () { - expect(const ThemeState(DashTheme()), isNotNull); + expect(const ThemeState.initial(), isNotNull); }); test('supports value equality', () { expect( - ThemeState(DashTheme()), - equals(const ThemeState(DashTheme())), + ThemeState.initial(), + equals(const ThemeState.initial()), ); }); }); From 0827924955c6c1db048e3d494f2426b6cdceb22f Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Mon, 7 Mar 2022 08:10:59 -0600 Subject: [PATCH 10/16] chore: add to props --- packages/pinball_theme/lib/src/pinball_theme.dart | 2 +- packages/pinball_theme/lib/src/themes/character_theme.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pinball_theme/lib/src/pinball_theme.dart b/packages/pinball_theme/lib/src/pinball_theme.dart index b4c404e5..a766a129 100644 --- a/packages/pinball_theme/lib/src/pinball_theme.dart +++ b/packages/pinball_theme/lib/src/pinball_theme.dart @@ -19,5 +19,5 @@ class PinballTheme extends Equatable { CharacterTheme get characterTheme => _characterTheme; @override - List get props => []; + List get props => [_characterTheme]; } diff --git a/packages/pinball_theme/lib/src/themes/character_theme.dart b/packages/pinball_theme/lib/src/themes/character_theme.dart index 50b6b557..8f81486a 100644 --- a/packages/pinball_theme/lib/src/themes/character_theme.dart +++ b/packages/pinball_theme/lib/src/themes/character_theme.dart @@ -15,5 +15,5 @@ abstract class CharacterTheme extends Equatable { Color get ballColor; @override - List get props => []; + List get props => [ballColor]; } From 9587a4fe7792577fae6823c8c56ee2e62ccc0869 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Mon, 7 Mar 2022 14:50:01 -0300 Subject: [PATCH 11/16] docs: adding dart docs to the wall component --- lib/game/components/wall.dart | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/game/components/wall.dart b/lib/game/components/wall.dart index 7bf58273..8e359f20 100644 --- a/lib/game/components/wall.dart +++ b/lib/game/components/wall.dart @@ -3,6 +3,12 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball/game/components/components.dart'; +/// {@template wall} +/// +/// A generic wall component, a static component that can +/// be used to create more complex structures. +/// +/// {@endtemplate} class Wall extends BodyComponent { Wall({ required this.start, @@ -29,6 +35,12 @@ class Wall extends BodyComponent { } } +/// {@template bottom_wall} +/// +/// An specifc [Wall] used to create bottom boundary of the +/// game board +/// +/// {@endtemplate} class BottomWall extends Wall { BottomWall(Forge2DGame game) : super( @@ -40,6 +52,12 @@ class BottomWall extends Wall { ); } +/// {@template bottom_wall_ball_contact_callback} +/// +/// The [ContactCallback] responsible for indentifying when a [Ball] +/// has fall into the bottom of the board +/// +/// {@endtemplate} class BottomWallBallContactCallback extends ContactCallback { @override void begin(Ball ball, BottomWall wall, Contact contact) { From a8c2257ce39f8a414785ffe287e834c1a7516894 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Mon, 7 Mar 2022 15:54:40 -0300 Subject: [PATCH 12/16] fix: changing ball spawning point to avoid context errors --- lib/game/pinball_game.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 91e12854..5b5d7885 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -18,10 +18,15 @@ class PinballGame extends Forge2DGame with FlameBloc { @override Future onLoad() async { - spawnBall(); addContactCallback(BallScorePointsCallback()); await add(BottomWall(this)); addContactCallback(BottomWallBallContactCallback()); } + + @override + void onAttach() { + super.onAttach(); + spawnBall(); + } } From 618ce97adc1020eaeb1ec938c8f34ed4749151bb Mon Sep 17 00:00:00 2001 From: Erick Date: Mon, 7 Mar 2022 16:23:01 -0300 Subject: [PATCH 13/16] Apply suggestions from code review Co-authored-by: Alejandro Santiago --- lib/game/components/wall.dart | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/game/components/wall.dart b/lib/game/components/wall.dart index 8e359f20..910d5b62 100644 --- a/lib/game/components/wall.dart +++ b/lib/game/components/wall.dart @@ -4,10 +4,7 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball/game/components/components.dart'; /// {@template wall} -/// -/// A generic wall component, a static component that can -/// be used to create more complex structures. -/// +/// A continuos generic and [BodyType.static] barrier that divides a game area. /// {@endtemplate} class Wall extends BodyComponent { Wall({ @@ -36,10 +33,10 @@ class Wall extends BodyComponent { } /// {@template bottom_wall} +/// [Wall] located at the bottom of the [board]. /// -/// An specifc [Wall] used to create bottom boundary of the -/// game board -/// +/// Collisions with [BottomWall] are listened by +/// [BottomWallBallContactCallback]. /// {@endtemplate} class BottomWall extends Wall { BottomWall(Forge2DGame game) @@ -53,10 +50,7 @@ class BottomWall extends Wall { } /// {@template bottom_wall_ball_contact_callback} -/// -/// The [ContactCallback] responsible for indentifying when a [Ball] -/// has fall into the bottom of the board -/// +/// Listens when a [Ball] falls into a [BottomWall]. /// {@endtemplate} class BottomWallBallContactCallback extends ContactCallback { @override From cde0dfaa250de037ba209c3ef634ce82a27a5f6f Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Mon, 7 Mar 2022 17:50:07 -0300 Subject: [PATCH 14/16] feat: adding configs for firebase hosting --- .gitignore | 2 ++ README.md | 27 +++++++++++++++++++++++++++ firebase.json | 10 ++++++++++ 3 files changed, 39 insertions(+) create mode 100644 firebase.json diff --git a/.gitignore b/.gitignore index bd315f72..eeb2b0f6 100644 --- a/.gitignore +++ b/.gitignore @@ -125,3 +125,5 @@ app.*.map.json !.idea/codeStyles/ !.idea/dictionaries/ !.idea/runConfigurations/ + +.firebase diff --git a/README.md b/README.md index b51926b5..80ef7b6a 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,33 @@ Update the `CFBundleLocalizations` array in the `Info.plist` at `ios/Runner/Info } ``` +### Deploy application to Firebase hosting + +Follow the following steps to deploy the application. + +## Firebase CLI + +Install and authenticate with [Firebase CLI tools](https://firebase.google.com/docs/cli) + +## Build the project using the desired enviroment + +```bash +# Development +$ flutter build web --release --target lib/main_development.dart + +# Staging +$ flutter build web --release --target lib/main_staging.dart + +# Production +$ flutter build web --release --target lib/main_production.dart +``` + +## Deploy + +```bash +$ firebase deploy +``` + [coverage_badge]: coverage_badge.svg [flutter_localizations_link]: https://api.flutter.dev/flutter/flutter_localizations/flutter_localizations-library.html [internationalization_link]: https://flutter.dev/docs/development/accessibility-and-localization/internationalization diff --git a/firebase.json b/firebase.json new file mode 100644 index 00000000..0d25a779 --- /dev/null +++ b/firebase.json @@ -0,0 +1,10 @@ +{ + "hosting": { + "public": "build/web", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ] + } +} From d70122aee53c0183f8ed8297f5a092370afd9e25 Mon Sep 17 00:00:00 2001 From: Erick Date: Mon, 7 Mar 2022 17:51:53 -0300 Subject: [PATCH 15/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 80ef7b6a..b91a1c98 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ Follow the following steps to deploy the application. Install and authenticate with [Firebase CLI tools](https://firebase.google.com/docs/cli) -## Build the project using the desired enviroment +## Build the project using the desired environment ```bash # Development From bf4b262a9d6bdc08b5bad093ab0ba09df29515be Mon Sep 17 00:00:00 2001 From: alestiago Date: Tue, 8 Mar 2022 09:05:44 +0000 Subject: [PATCH 16/16] docs: removed erroneous reference --- lib/game/components/wall.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/game/components/wall.dart b/lib/game/components/wall.dart index 910d5b62..b784b8cb 100644 --- a/lib/game/components/wall.dart +++ b/lib/game/components/wall.dart @@ -33,7 +33,7 @@ class Wall extends BodyComponent { } /// {@template bottom_wall} -/// [Wall] located at the bottom of the [board]. +/// [Wall] located at the bottom of the board. /// /// Collisions with [BottomWall] are listened by /// [BottomWallBallContactCallback].