feat: change onboarding flow and remove theme switch button

This commit is contained in:
Udhay-Adithya
2025-03-17 18:11:13 +05:30
parent b64d453886
commit 9de706d6b9
5 changed files with 81 additions and 96 deletions

View File

@@ -1,5 +1,8 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'dart:developer' show log;
import 'package:apidash/screens/mobile/onboarding_screen.dart';
import 'package:apidash_design_system/apidash_design_system.dart'; import 'package:apidash_design_system/apidash_design_system.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart'; import 'package:flutter_portal/flutter_portal.dart';
@@ -104,6 +107,10 @@ class _AppState extends ConsumerState<App> with WindowListener {
class DashApp extends ConsumerWidget { class DashApp extends ConsumerWidget {
const DashApp({super.key}); const DashApp({super.key});
Future<bool> _checkOnboardingStatus() async {
return await getOnboardingStatusFromSharedPrefs();
}
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final isDarkMode = final isDarkMode =
@@ -111,6 +118,7 @@ class DashApp extends ConsumerWidget {
final workspaceFolderPath = ref final workspaceFolderPath = ref
.watch(settingsProvider.select((value) => value.workspaceFolderPath)); .watch(settingsProvider.select((value) => value.workspaceFolderPath));
final showWorkspaceSelector = kIsDesktop && (workspaceFolderPath == null); final showWorkspaceSelector = kIsDesktop && (workspaceFolderPath == null);
return Portal( return Portal(
child: MaterialApp( child: MaterialApp(
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
@@ -133,6 +141,23 @@ class DashApp extends ConsumerWidget {
} }
}, },
) )
: kIsMobile
? FutureBuilder<bool>(
future: _checkOnboardingStatus(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
}
if (snapshot.connectionState == ConnectionState.done) {
log(snapshot.data.toString());
final showOnboarding = snapshot.data ?? false;
return showOnboarding
? const MobileDashboard()
: const OnboardingScreen();
}
return const MobileDashboard();
},
)
: Stack( : Stack(
children: [ children: [
!kIsLinux && !kIsMobile !kIsLinux && !kIsMobile

View File

@@ -1,29 +0,0 @@
import 'package:apidash/providers/settings_providers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class ThemeSwitchButton extends StatelessWidget {
const ThemeSwitchButton({super.key});
@override
Widget build(BuildContext context) {
return Consumer(builder: (context, ref, child) {
final settings = ref.watch(settingsProvider);
return IconButton(
icon: settings.isDark
? const Icon(
Icons.dark_mode_rounded,
color: Colors.indigo,
)
: const Icon(
Icons.light_mode_rounded,
color: Colors.yellow,
),
onPressed: () {
ref.read(settingsProvider.notifier).update(isDark: !settings.isDark);
},
);
});
}
}

View File

@@ -1,5 +1,3 @@
import 'package:apidash/screens/mobile/onboarding_screen.dart';
import 'package:apidash/services/shared_preferences_services.dart';
import 'package:apidash_design_system/apidash_design_system.dart'; import 'package:apidash_design_system/apidash_design_system.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@@ -21,22 +19,13 @@ class MobileDashboard extends ConsumerStatefulWidget {
} }
class _MobileDashboardState extends ConsumerState<MobileDashboard> { class _MobileDashboardState extends ConsumerState<MobileDashboard> {
Future<bool> _checkOnboardingStatus() async {
return await getOnboardingStatusFromSharedPrefs();
}
@override @override
Widget build(BuildContext context) { Widget build(
return FutureBuilder<bool>( BuildContext context,
future: _checkOnboardingStatus(), ) {
builder: (context, snapshot) {
final railIdx = ref.watch(navRailIndexStateProvider); final railIdx = ref.watch(navRailIndexStateProvider);
final isLeftDrawerOpen = ref.watch(leftDrawerStateProvider); final isLeftDrawerOpen = ref.watch(leftDrawerStateProvider);
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.data == false) {
return const OnboardingScreen();
}
return AnnotatedRegion<SystemUiOverlayStyle>( return AnnotatedRegion<SystemUiOverlayStyle>(
value: FlexColorScheme.themedSystemNavigationBar( value: FlexColorScheme.themedSystemNavigationBar(
context, context,
@@ -46,7 +35,9 @@ class _MobileDashboardState extends ConsumerState<MobileDashboard> {
child: Stack( child: Stack(
alignment: AlignmentDirectional.bottomCenter, alignment: AlignmentDirectional.bottomCenter,
children: [ children: [
PageBranch(pageIndex: railIdx), PageBranch(
pageIndex: railIdx,
),
if (context.isMediumWindow) if (context.isMediumWindow)
AnimatedPositioned( AnimatedPositioned(
bottom: railIdx > 2 bottom: railIdx > 2
@@ -64,8 +55,6 @@ class _MobileDashboardState extends ConsumerState<MobileDashboard> {
], ],
), ),
); );
},
);
} }
} }

View File

@@ -1,5 +1,4 @@
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
import 'package:apidash/screens/common_widgets/theme_switch_button.dart';
import 'package:apidash/screens/mobile/widgets/onboarding_slide.dart'; import 'package:apidash/screens/mobile/widgets/onboarding_slide.dart';
import 'package:apidash/screens/screens.dart'; import 'package:apidash/screens/screens.dart';
import 'package:apidash/services/services.dart'; import 'package:apidash/services/services.dart';
@@ -42,7 +41,6 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
appBar: AppBar( appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.surface, backgroundColor: Theme.of(context).colorScheme.surface,
actions: [ actions: [
const ThemeSwitchButton(),
TextButton( TextButton(
onPressed: () async { onPressed: () async {
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
@@ -143,9 +141,11 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
child: IconButton( child: IconButton(
onPressed: () async { onPressed: () async {
_onNextPressed(); _onNextPressed();
if (currentPageIndex == 2) {
await setOnboardingStatusToSharedPrefs( await setOnboardingStatusToSharedPrefs(
isOnboardingComplete: true, isOnboardingComplete: true,
); );
}
}, },
icon: const Icon( icon: const Icon(
Icons.arrow_forward_rounded, Icons.arrow_forward_rounded,

View File

@@ -37,5 +37,5 @@ Future<bool> getOnboardingStatusFromSharedPrefs() async {
Future<void> clearSharedPrefs() async { Future<void> clearSharedPrefs() async {
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
await prefs.remove(kSharedPrefSettingsKey); await prefs.clear();
} }