feat: add fadeSlideTransitionBuilder for smoother transitions in user login

This commit is contained in:
Dr.Blank 2025-04-23 00:53:24 +05:30
parent ad0cd6e2ad
commit a05f095892
No known key found for this signature in database
GPG key ID: BA5F87FF0560C57B
2 changed files with 42 additions and 32 deletions

View file

@ -39,22 +39,7 @@ class OnboardingSinglePage extends HookConsumerWidget {
} }
} }
class OnboardingBody extends HookConsumerWidget { Widget fadeSlideTransitionBuilder(
const OnboardingBody({
super.key,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
final apiSettings = ref.watch(apiSettingsProvider);
final serverUriController = useTextEditingController(
text: apiSettings.activeServer?.serverUrl.toString() ?? 'https://',
);
var audiobookshelfUri = makeBaseUrl(serverUriController.text);
final canUserLogin = useState(apiSettings.activeServer != null);
fadeSlideTransitionBuilder(
Widget child, Widget child,
Animation<double> animation, Animation<double> animation,
) { ) {
@ -70,6 +55,21 @@ class OnboardingBody extends HookConsumerWidget {
); );
} }
class OnboardingBody extends HookConsumerWidget {
const OnboardingBody({
super.key,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
final apiSettings = ref.watch(apiSettingsProvider);
final serverUriController = useTextEditingController(
text: apiSettings.activeServer?.serverUrl.toString() ?? 'https://',
);
var audiobookshelfUri = makeBaseUrl(serverUriController.text);
final canUserLogin = useState(apiSettings.activeServer != null);
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,

View file

@ -1,9 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shelfsdk/audiobookshelf_api.dart'; import 'package:shelfsdk/audiobookshelf_api.dart';
import 'package:vaani/api/api_provider.dart'; import 'package:vaani/api/api_provider.dart';
import 'package:vaani/api/server_provider.dart'; import 'package:vaani/api/server_provider.dart';
import 'package:vaani/features/onboarding/view/onboarding_single_page.dart'
show fadeSlideTransitionBuilder;
import 'package:vaani/features/onboarding/view/user_login_with_open_id.dart'; import 'package:vaani/features/onboarding/view/user_login_with_open_id.dart';
import 'package:vaani/features/onboarding/view/user_login_with_password.dart'; import 'package:vaani/features/onboarding/view/user_login_with_password.dart';
import 'package:vaani/features/onboarding/view/user_login_with_token.dart'; import 'package:vaani/features/onboarding/view/user_login_with_token.dart';
@ -172,11 +175,17 @@ class UserLoginMultipleAuth extends HookConsumerWidget {
} }
}, },
), ),
], ].animate(interval: 100.ms).fadeIn(
duration: 150.ms,
curve: Curves.easeIn,
),
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: AnimatedSwitcher(
duration: 200.ms,
transitionBuilder: fadeSlideTransitionBuilder,
child: switch (methodChoice.value) { child: switch (methodChoice.value) {
AuthMethodChoice.authToken => UserLoginWithToken( AuthMethodChoice.authToken => UserLoginWithToken(
server: server, server: server,
@ -193,6 +202,7 @@ class UserLoginMultipleAuth extends HookConsumerWidget {
), ),
}, },
), ),
),
], ],
), ),
), ),