From bc193990641ff2a75a0a531ac60d924e7463278f Mon Sep 17 00:00:00 2001 From: NaiJi Date: Tue, 27 Dec 2022 11:01:37 +0400 Subject: [PATCH] feat: Implement fabs --- lib/ui/fabs/addcourierfab.dart | 23 +++++++++++++ lib/ui/fabs/additemfab.dart | 23 +++++++++++++ lib/ui/fabs/addorderfab.dart | 23 +++++++++++++ lib/ui/orderspage.dart | 1 - lib/ui/root.dart | 62 +++++++++++++++++++++++++++++++--- 5 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 lib/ui/fabs/addcourierfab.dart create mode 100644 lib/ui/fabs/additemfab.dart create mode 100644 lib/ui/fabs/addorderfab.dart diff --git a/lib/ui/fabs/addcourierfab.dart b/lib/ui/fabs/addcourierfab.dart new file mode 100644 index 0000000..44cc565 --- /dev/null +++ b/lib/ui/fabs/addcourierfab.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:selfprivacy/ui/courierspage.dart'; + +class AddCourierFab extends StatelessWidget { + const AddCourierFab({super.key}); + + @override + Widget build(final BuildContext context) => FloatingActionButton.small( + heroTag: 'new_courier_fab', + onPressed: () { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (final BuildContext context) => Padding( + padding: MediaQuery.of(context).viewInsets, + child: const CouriersDetails(), + ), + ); + }, + child: const Icon(Icons.person_add_outlined), + ); +} diff --git a/lib/ui/fabs/additemfab.dart b/lib/ui/fabs/additemfab.dart new file mode 100644 index 0000000..b56e933 --- /dev/null +++ b/lib/ui/fabs/additemfab.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:selfprivacy/ui/itemspage.dart'; + +class AddItemFab extends StatelessWidget { + const AddItemFab({super.key}); + + @override + Widget build(final BuildContext context) => FloatingActionButton.small( + heroTag: 'new_item_fab', + onPressed: () { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (final BuildContext context) => Padding( + padding: MediaQuery.of(context).viewInsets, + child: const ItemsDetails(), + ), + ); + }, + child: const Icon(Icons.add_box_outlined), + ); +} diff --git a/lib/ui/fabs/addorderfab.dart b/lib/ui/fabs/addorderfab.dart new file mode 100644 index 0000000..4c89ae1 --- /dev/null +++ b/lib/ui/fabs/addorderfab.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +class AddOrderFab extends StatelessWidget { + const AddOrderFab({super.key}); + + @override + Widget build(final BuildContext context) => FloatingActionButton.small( + heroTag: 'new_order_fab', + onPressed: () { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (final BuildContext context) => Padding( + padding: MediaQuery.of(context).viewInsets, + child: + null, // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111 + ), + ); + }, + child: const Icon(Icons.add_alarm_outlined), + ); +} diff --git a/lib/ui/orderspage.dart b/lib/ui/orderspage.dart index 594050c..2e05b71 100644 --- a/lib/ui/orderspage.dart +++ b/lib/ui/orderspage.dart @@ -5,7 +5,6 @@ import 'package:selfprivacy/logic/orderscubit.dart'; import 'package:selfprivacy/models/courier.dart'; import 'package:selfprivacy/models/item.dart'; import 'package:selfprivacy/models/order.dart'; -import 'package:easy_localization/easy_localization.dart'; part 'order.dart'; diff --git a/lib/ui/root.dart b/lib/ui/root.dart index 6402219..c5c86be 100644 --- a/lib/ui/root.dart +++ b/lib/ui/root.dart @@ -2,6 +2,9 @@ import 'package:flutter/material.dart'; import 'package:selfprivacy/logic/appsettingscubit.dart'; import 'package:selfprivacy/ui/brandtabbar.dart'; import 'package:selfprivacy/ui/courierspage.dart'; +import 'package:selfprivacy/ui/fabs/addcourierfab.dart'; +import 'package:selfprivacy/ui/fabs/additemfab.dart'; +import 'package:selfprivacy/ui/fabs/addorderfab.dart'; import 'package:selfprivacy/ui/itemspage.dart'; import 'package:selfprivacy/ui/orderspage.dart'; @@ -15,19 +18,47 @@ class RootPage extends StatefulWidget { class _RootPageState extends State with TickerProviderStateMixin { late TabController tabController; - late final AnimationController _controller = AnimationController( + late final AnimationController _controllerCouriers = AnimationController( duration: const Duration(milliseconds: 400), vsync: this, ); + late final Animation _animationCouriers = CurvedAnimation( + parent: _controllerCouriers, + curve: Curves.fastOutSlowIn, + ); + + late final AnimationController _controllerItems = AnimationController( + duration: const Duration(milliseconds: 400), + vsync: this, + ); + late final Animation _animationItems = CurvedAnimation( + parent: _controllerItems, + curve: Curves.fastOutSlowIn, + ); + + late final AnimationController _controllerOrders = AnimationController( + duration: const Duration(milliseconds: 400), + vsync: this, + ); + late final Animation _animationOrders = CurvedAnimation( + parent: _controllerOrders, + curve: Curves.fastOutSlowIn, + ); @override void initState() { tabController = TabController(length: 3, vsync: this); tabController.addListener(() { setState(() { + tabController.index == 0 + ? _controllerItems.forward() + : _controllerItems.reverse(); + tabController.index == 1 + ? _controllerCouriers.forward() + : _controllerCouriers.reverse(); tabController.index == 2 - ? _controller.forward() - : _controller.reverse(); + ? _controllerOrders.forward() + : _controllerOrders.reverse(); }); }); super.initState(); @@ -36,7 +67,9 @@ class _RootPageState extends State with TickerProviderStateMixin { @override void dispose() { tabController.dispose(); - _controller.dispose(); + _controllerItems.dispose(); + _controllerOrders.dispose(); + _controllerCouriers.dispose(); super.dispose(); } @@ -56,6 +89,27 @@ class _RootPageState extends State with TickerProviderStateMixin { bottomNavigationBar: BrandTabBar( controller: tabController, ), + floatingActionButton: SizedBox( + height: 104 + 16, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ScaleTransition( + scale: _animationItems, + child: const AddItemFab(), + ), + ScaleTransition( + scale: _animationCouriers, + child: const AddCourierFab(), + ), + ScaleTransition( + scale: _animationOrders, + child: const AddOrderFab(), + ), + ], + ), + ), ), ), );