From b2ef0883e30617d837d9774dc93dec1bbd4672c0 Mon Sep 17 00:00:00 2001 From: Filip Krawczyk Date: Thu, 25 Aug 2022 18:22:14 +0200 Subject: [PATCH] remove store from being a property. also better animation --- lib/widgets/editor/editor_toolbar.dart | 57 +++++++++++++++----------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/lib/widgets/editor/editor_toolbar.dart b/lib/widgets/editor/editor_toolbar.dart index 4a34967..aebcf78 100644 --- a/lib/widgets/editor/editor_toolbar.dart +++ b/lib/widgets/editor/editor_toolbar.dart @@ -42,42 +42,53 @@ enum HeaderLevel { class EditorToolbar extends HookWidget { final TextEditingController controller; final String instanceHost; - final EditorToolbarStore store; final FocusNode editorFocusNode; static const _height = 50.0; - EditorToolbar({ + const EditorToolbar({ required this.controller, required this.instanceHost, required this.editorFocusNode, - }) : store = EditorToolbarStore(instanceHost); + }); @override Widget build(BuildContext context) { final visible = useListenable(editorFocusNode).hasFocus; return MobxProvider( - create: (context) => store, - child: AsyncStoreListener( - asyncStore: store.imageUploadState, - child: AnimatedSwitcher( - duration: const Duration(milliseconds: 200), - child: visible - ? Container( - height: _height, - width: double.infinity, - color: Theme.of(context).canvasColor, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: _ToolbarBody( - controller: controller, - instanceHost: instanceHost, + create: (context) => EditorToolbarStore(instanceHost), + child: ObserverBuilder(builder: (context, store) { + return AsyncStoreListener( + asyncStore: store.imageUploadState, + child: AnimatedSwitcher( + duration: kThemeAnimationDuration, + transitionBuilder: (child, animation) { + final offsetAnimation = + Tween(begin: const Offset(0, 1.5), end: Offset.zero) + .animate(animation); + + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + child: visible + ? Container( + height: _height, + width: double.infinity, + color: Theme.of(context).canvasColor, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: _ToolbarBody( + controller: controller, + instanceHost: instanceHost, + ), ), - ), - ) - : const SizedBox.shrink(), - ), - ), + ) + : const SizedBox.shrink(), + ), + ); + }), ); }