Skip to content

Commit

Permalink
[Presentation] We are now using the app fab mixin
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Jun 4, 2021
1 parent 77bc977 commit e194810
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 214 deletions.
Expand Up @@ -6,8 +6,8 @@ import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/bullet_list.dart';
import 'package:genshindb/presentation/shared/extensions/scroll_controller_extensions.dart';
import 'package:genshindb/presentation/shared/loading.dart';
import 'package:genshindb/presentation/shared/mixins/app_fab_mixin.dart';
import 'package:genshindb/presentation/shared/nothing_found_column.dart';
import 'package:genshindb/presentation/shared/styles.dart';

Expand All @@ -20,22 +20,12 @@ class CalculatorSessionsPage extends StatefulWidget {
_CalculatorSessionsPageState createState() => _CalculatorSessionsPageState();
}

class _CalculatorSessionsPageState extends State<CalculatorSessionsPage> with SingleTickerProviderStateMixin {
ScrollController _scrollController;
AnimationController _hideFabAnimController;

class _CalculatorSessionsPageState extends State<CalculatorSessionsPage> with SingleTickerProviderStateMixin, AppFabMixin {
@override
void initState() {
super.initState();
bool get isInitiallyVisible => true;

_scrollController = ScrollController();
_hideFabAnimController = AnimationController(
vsync: this,
duration: kThemeAnimationDuration,
value: 1, // initially visible
);
_scrollController.addListener(() => _scrollController.handleScrollForFab(_hideFabAnimController, hideOnTop: false));
}
@override
bool get hideOnTop => false;

@override
Widget build(BuildContext context) {
Expand All @@ -62,8 +52,8 @@ class _CalculatorSessionsPageState extends State<CalculatorSessionsPage> with Si
floatingActionButton: AppFab(
onPressed: () => _showAddSessionDialog(context),
icon: const Icon(Icons.add),
hideFabAnimController: _hideFabAnimController,
scrollController: _scrollController,
hideFabAnimController: hideFabAnimController,
scrollController: scrollController,
mini: false,
),
body: SafeArea(
Expand All @@ -76,7 +66,7 @@ class _CalculatorSessionsPageState extends State<CalculatorSessionsPage> with Si
return NothingFoundColumn(msg: s.noSessionsHaveBeenCreated);
}
return ListView.separated(
controller: _scrollController,
controller: scrollController,
itemCount: state.sessions.length,
separatorBuilder: (ctx, index) => const Divider(),
itemBuilder: (ctx, index) => SessionListItem(session: state.sessions[index]),
Expand All @@ -89,13 +79,6 @@ class _CalculatorSessionsPageState extends State<CalculatorSessionsPage> with Si
);
}

@override
void dispose() {
_scrollController.dispose();
_hideFabAnimController.dispose();
super.dispose();
}

Future<void> _showAddSessionDialog(BuildContext context) async {
await showDialog(context: context, builder: (_) => const AddEditSessionDialog.create());
context.read<CalculatorAscMaterialsSessionFormBloc>().add(const CalculatorAscMaterialsSessionFormEvent.close());
Expand Down
52 changes: 7 additions & 45 deletions lib/presentation/character/character_page.dart
@@ -1,58 +1,20 @@
import 'package:flutter/material.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/extensions/scroll_controller_extensions.dart';
import 'package:genshindb/presentation/shared/scaffold_with_fab.dart';

import 'widgets/character_detail.dart';
import 'widgets/character_detail_top.dart';

class CharacterPage extends StatefulWidget {
class CharacterPage extends StatelessWidget {
const CharacterPage({Key key}) : super(key: key);

@override
_CharacterPageState createState() => _CharacterPageState();
}

class _CharacterPageState extends State<CharacterPage> with SingleTickerProviderStateMixin {
ScrollController _scrollController;
AnimationController _hideFabAnimController;

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

_scrollController = ScrollController();
_hideFabAnimController = AnimationController(
vsync: this,
duration: kThemeAnimationDuration,
value: 0, // initially not visible
);
_scrollController.addListener(() => _scrollController.handleScrollForFab(_hideFabAnimController));
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: SingleChildScrollView(
controller: _scrollController,
child: Stack(
fit: StackFit.passthrough,
clipBehavior: Clip.none,
children: const [CharacterDetailTop(), CharacterDetailBottom()],
),
),
),
floatingActionButton: AppFab(
hideFabAnimController: _hideFabAnimController,
scrollController: _scrollController,
return ScaffoldWithFab(
child: Stack(
fit: StackFit.passthrough,
clipBehavior: Clip.none,
children: const [CharacterDetailTop(), CharacterDetailBottom()],
),
);
}

@override
void dispose() {
_scrollController.dispose();
_hideFabAnimController.dispose();
super.dispose();
}
}
Expand Up @@ -6,30 +6,20 @@ import 'package:genshindb/domain/extensions/string_extensions.dart';
import 'package:genshindb/presentation/characters/characters_page.dart';
import 'package:genshindb/presentation/characters/widgets/character_card.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/extensions/scroll_controller_extensions.dart';
import 'package:genshindb/presentation/shared/loading.dart';
import 'package:genshindb/presentation/shared/mixins/app_fab_mixin.dart';

class CharactersInventoryTabPage extends StatefulWidget {
@override
_CharactersInventoryTabPageState createState() => _CharactersInventoryTabPageState();
}

class _CharactersInventoryTabPageState extends State<CharactersInventoryTabPage> with SingleTickerProviderStateMixin {
ScrollController _scrollController;
AnimationController _hideFabAnimController;

class _CharactersInventoryTabPageState extends State<CharactersInventoryTabPage> with SingleTickerProviderStateMixin, AppFabMixin {
@override
void initState() {
super.initState();
bool get isInitiallyVisible => true;

_scrollController = ScrollController();
_hideFabAnimController = AnimationController(
vsync: this,
duration: kThemeAnimationDuration,
value: 1, // initially visible
);
_scrollController.addListener(() => _scrollController.handleScrollForFab(_hideFabAnimController, hideOnTop: false));
}
@override
bool get hideOnTop => false;

@override
Widget build(BuildContext context) {
Expand All @@ -40,15 +30,15 @@ class _CharactersInventoryTabPageState extends State<CharactersInventoryTabPage>
floatingActionButton: AppFab(
onPressed: () => _openCharactersPage(context),
icon: const Icon(Icons.add),
hideFabAnimController: _hideFabAnimController,
scrollController: _scrollController,
hideFabAnimController: hideFabAnimController,
scrollController: scrollController,
mini: false,
),
body: BlocBuilder<InventoryBloc, InventoryState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => StaggeredGridView.countBuilder(
controller: _scrollController,
controller: scrollController,
crossAxisCount: isPortrait ? 2 : 3,
itemBuilder: (ctx, index) => CharacterCard.item(char: state.characters[index]),
itemCount: state.characters.length,
Expand All @@ -62,13 +52,6 @@ class _CharactersInventoryTabPageState extends State<CharactersInventoryTabPage>
);
}

@override
void dispose() {
_scrollController.dispose();
_hideFabAnimController.dispose();
super.dispose();
}

Future<void> _openCharactersPage(BuildContext context) async {
final inventoryBloc = context.read<InventoryBloc>();
final charactersBloc = context.read<CharactersBloc>();
Expand Down
Expand Up @@ -3,47 +3,27 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/presentation/materials/widgets/material_card.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/extensions/scroll_controller_extensions.dart';
import 'package:genshindb/presentation/shared/loading.dart';
import 'package:genshindb/presentation/shared/mixins/app_fab_mixin.dart';

class MaterialsInventoryTabPage extends StatefulWidget {
@override
_MaterialsInventoryTabPageState createState() => _MaterialsInventoryTabPageState();
}

class _MaterialsInventoryTabPageState extends State<MaterialsInventoryTabPage> with SingleTickerProviderStateMixin {
ScrollController _scrollController;
AnimationController _hideFabAnimController;

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

_scrollController = ScrollController();
_hideFabAnimController = AnimationController(
vsync: this,
duration: kThemeAnimationDuration,
value: 0, // initially not visible
);
_scrollController.addListener(() => _scrollController.handleScrollForFab(_hideFabAnimController));
}

class _MaterialsInventoryTabPageState extends State<MaterialsInventoryTabPage> with SingleTickerProviderStateMixin, AppFabMixin {
@override
Widget build(BuildContext context) {
final isPortrait = MediaQuery.of(context).orientation == Orientation.portrait;
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: Scaffold(
floatingActionButton: AppFab(
scrollController: _scrollController,
hideFabAnimController: _hideFabAnimController,
),
floatingActionButton: getAppFab(),
body: BlocBuilder<InventoryBloc, InventoryState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => StaggeredGridView.countBuilder(
controller: _scrollController,
controller: scrollController,
crossAxisCount: isPortrait ? 3 : 5,
itemBuilder: (ctx, index) => MaterialCard.quantity(item: state.materials[index]),
itemCount: state.materials.length,
Expand All @@ -56,11 +36,4 @@ class _MaterialsInventoryTabPageState extends State<MaterialsInventoryTabPage> w
),
);
}

@override
void dispose() {
_scrollController.dispose();
_hideFabAnimController.dispose();
super.dispose();
}
}
26 changes: 8 additions & 18 deletions lib/presentation/inventory/widgets/weapons_inventory_tab_page.dart
Expand Up @@ -4,8 +4,8 @@ import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/domain/extensions/string_extensions.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/extensions/scroll_controller_extensions.dart';
import 'package:genshindb/presentation/shared/loading.dart';
import 'package:genshindb/presentation/shared/mixins/app_fab_mixin.dart';
import 'package:genshindb/presentation/weapons/weapons_page.dart';
import 'package:genshindb/presentation/weapons/widgets/weapon_card.dart';

Expand All @@ -14,22 +14,12 @@ class WeaponsInventoryTabPage extends StatefulWidget {
_WeaponsInventoryTabPageState createState() => _WeaponsInventoryTabPageState();
}

class _WeaponsInventoryTabPageState extends State<WeaponsInventoryTabPage> with SingleTickerProviderStateMixin {
ScrollController _scrollController;
AnimationController _hideFabAnimController;

class _WeaponsInventoryTabPageState extends State<WeaponsInventoryTabPage> with SingleTickerProviderStateMixin, AppFabMixin {
@override
void initState() {
super.initState();
bool get isInitiallyVisible => true;

_scrollController = ScrollController();
_hideFabAnimController = AnimationController(
vsync: this,
duration: kThemeAnimationDuration,
value: 1, // initially visible
);
_scrollController.addListener(() => _scrollController.handleScrollForFab(_hideFabAnimController, hideOnTop: false));
}
@override
bool get hideOnTop => false;

@override
Widget build(BuildContext context) {
Expand All @@ -40,15 +30,15 @@ class _WeaponsInventoryTabPageState extends State<WeaponsInventoryTabPage> with
floatingActionButton: AppFab(
onPressed: () => _openWeaponsPage(context),
icon: const Icon(Icons.add),
hideFabAnimController: _hideFabAnimController,
scrollController: _scrollController,
hideFabAnimController: hideFabAnimController,
scrollController: scrollController,
mini: false,
),
body: BlocBuilder<InventoryBloc, InventoryState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => StaggeredGridView.countBuilder(
controller: _scrollController,
controller: scrollController,
crossAxisCount: isPortrait ? 2 : 3,
itemBuilder: (ctx, index) => WeaponCard.item(weapon: state.weapons[index]),
itemCount: state.weapons.length,
Expand Down

0 comments on commit e194810

Please sign in to comment.