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
import 'dart:developer' show log;
import 'package:apidash/screens/mobile/onboarding_screen.dart';
import 'package:apidash_design_system/apidash_design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
@@ -104,6 +107,10 @@ class _AppState extends ConsumerState<App> with WindowListener {
class DashApp extends ConsumerWidget {
const DashApp({super.key});
Future<bool> _checkOnboardingStatus() async {
return await getOnboardingStatusFromSharedPrefs();
}
@override
Widget build(BuildContext context, WidgetRef ref) {
final isDarkMode =
@@ -111,6 +118,7 @@ class DashApp extends ConsumerWidget {
final workspaceFolderPath = ref
.watch(settingsProvider.select((value) => value.workspaceFolderPath));
final showWorkspaceSelector = kIsDesktop && (workspaceFolderPath == null);
return Portal(
child: MaterialApp(
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(
children: [
!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:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -21,22 +19,13 @@ class MobileDashboard extends ConsumerStatefulWidget {
}
class _MobileDashboardState extends ConsumerState<MobileDashboard> {
Future<bool> _checkOnboardingStatus() async {
return await getOnboardingStatusFromSharedPrefs();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: _checkOnboardingStatus(),
builder: (context, snapshot) {
Widget build(
BuildContext context,
) {
final railIdx = ref.watch(navRailIndexStateProvider);
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>(
value: FlexColorScheme.themedSystemNavigationBar(
context,
@@ -46,7 +35,9 @@ class _MobileDashboardState extends ConsumerState<MobileDashboard> {
child: Stack(
alignment: AlignmentDirectional.bottomCenter,
children: [
PageBranch(pageIndex: railIdx),
PageBranch(
pageIndex: railIdx,
),
if (context.isMediumWindow)
AnimatedPositioned(
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/screens/common_widgets/theme_switch_button.dart';
import 'package:apidash/screens/mobile/widgets/onboarding_slide.dart';
import 'package:apidash/screens/screens.dart';
import 'package:apidash/services/services.dart';
@@ -42,7 +41,6 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.surface,
actions: [
const ThemeSwitchButton(),
TextButton(
onPressed: () async {
Navigator.pushAndRemoveUntil(
@@ -143,9 +141,11 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
child: IconButton(
onPressed: () async {
_onNextPressed();
if (currentPageIndex == 2) {
await setOnboardingStatusToSharedPrefs(
isOnboardingComplete: true,
);
}
},
icon: const Icon(
Icons.arrow_forward_rounded,

View File

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