diff --git a/lib/screens/dashboard.dart b/lib/screens/dashboard.dart index 19d2ca28..35189fd0 100644 --- a/lib/screens/dashboard.dart +++ b/lib/screens/dashboard.dart @@ -6,16 +6,11 @@ import 'home_page/home_page.dart'; import 'intro_page.dart'; import 'settings_page.dart'; -class Dashboard extends ConsumerStatefulWidget { +class Dashboard extends ConsumerWidget { const Dashboard({super.key}); @override - ConsumerState createState() => _DashboardState(); -} - -class _DashboardState extends ConsumerState { - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final railIdx = ref.watch(navRailIndexStateProvider); return Scaffold( body: SafeArea( @@ -50,13 +45,13 @@ class _DashboardState extends ConsumerState { children: [ Padding( padding: const EdgeInsets.only(bottom: 16.0), - child: bottomButton(context, railIdx, 1, Icons.help, - Icons.help_outline), + child: bottomButton(context, ref, railIdx, 1, + Icons.help, Icons.help_outline), ), Padding( padding: const EdgeInsets.only(bottom: 16.0), - child: bottomButton(context, railIdx, 2, Icons.settings, - Icons.settings_outlined), + child: bottomButton(context, ref, railIdx, 2, + Icons.settings, Icons.settings_outlined), ), ], ), @@ -99,6 +94,7 @@ class _DashboardState extends ConsumerState { TextButton bottomButton( BuildContext context, + WidgetRef ref, int railIdx, int buttonIdx, IconData selectedIcon, diff --git a/lib/screens/home_page/editor_pane/url_card.dart b/lib/screens/home_page/editor_pane/url_card.dart index 753fb34a..b7df1d66 100644 --- a/lib/screens/home_page/editor_pane/url_card.dart +++ b/lib/screens/home_page/editor_pane/url_card.dart @@ -4,20 +4,9 @@ import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/consts.dart'; -class EditorPaneRequestURLCard extends StatefulWidget { +class EditorPaneRequestURLCard extends StatelessWidget { const EditorPaneRequestURLCard({super.key}); - @override - State createState() => - _EditorPaneRequestURLCardState(); -} - -class _EditorPaneRequestURLCardState extends State { - @override - void initState() { - super.initState(); - } - @override Widget build(BuildContext context) { return Card( @@ -52,25 +41,13 @@ class _EditorPaneRequestURLCardState extends State { } } -class DropdownButtonHTTPMethod extends ConsumerStatefulWidget { +class DropdownButtonHTTPMethod extends ConsumerWidget { const DropdownButtonHTTPMethod({ super.key, }); @override - ConsumerState createState() => - _DropdownButtonHTTPMethodState(); -} - -class _DropdownButtonHTTPMethodState - extends ConsumerState { - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final method = ref.watch(activeRequestModelProvider.select((value) => value?.method)); return DropdownButtonHttpMethod( @@ -85,23 +62,13 @@ class _DropdownButtonHTTPMethodState } } -class URLTextField extends ConsumerStatefulWidget { +class URLTextField extends ConsumerWidget { const URLTextField({ super.key, }); @override - ConsumerState createState() => _URLTextFieldState(); -} - -class _URLTextFieldState extends ConsumerState { - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final activeId = ref.watch(activeIdStateProvider); return URLField( activeId: activeId!, @@ -118,23 +85,13 @@ class _URLTextFieldState extends ConsumerState { } } -class SendButton extends ConsumerStatefulWidget { +class SendButton extends ConsumerWidget { const SendButton({ super.key, }); @override - ConsumerState createState() => _SendButtonState(); -} - -class _SendButtonState extends ConsumerState { - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final activeId = ref.watch(activeIdStateProvider); final sentRequestId = ref.watch(sentRequestIdStateProvider); return SendRequestButton( diff --git a/lib/screens/home_page/home_page.dart b/lib/screens/home_page/home_page.dart index d8843f0d..a7338a08 100644 --- a/lib/screens/home_page/home_page.dart +++ b/lib/screens/home_page/home_page.dart @@ -3,14 +3,9 @@ import 'package:apidash/widgets/widgets.dart'; import 'editor_pane/editor_pane.dart'; import 'collection_pane.dart'; -class HomePage extends StatefulWidget { +class HomePage extends StatelessWidget { const HomePage({super.key}); - @override - HomePageState createState() => HomePageState(); -} - -class HomePageState extends State { @override Widget build(BuildContext context) { return const Column( diff --git a/lib/screens/intro_page.dart b/lib/screens/intro_page.dart index f7ca937b..83d32253 100644 --- a/lib/screens/intro_page.dart +++ b/lib/screens/intro_page.dart @@ -1,14 +1,9 @@ import 'package:flutter/material.dart'; import 'package:apidash/widgets/widgets.dart'; -class IntroPage extends StatefulWidget { +class IntroPage extends StatelessWidget { const IntroPage({super.key}); - @override - State createState() => _IntroPageState(); -} - -class _IntroPageState extends State { @override Widget build(BuildContext context) { return const IntroMessage(); diff --git a/lib/screens/settings_page.dart b/lib/screens/settings_page.dart index e1249812..c40c8dd2 100644 --- a/lib/screens/settings_page.dart +++ b/lib/screens/settings_page.dart @@ -2,36 +2,40 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../providers/providers.dart'; import '../widgets/widgets.dart'; -import '../utils/utils.dart'; -import 'package:apidash/consts.dart'; +import '../common/utils.dart'; +import '../consts.dart'; -class SettingsPage extends ConsumerStatefulWidget { +class SettingsPage extends ConsumerWidget { const SettingsPage({super.key}); @override - ConsumerState createState() => _SettingsPageState(); -} - -class _SettingsPageState extends ConsumerState { - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final settings = ref.watch(settingsProvider); final clearingData = ref.watch(clearDataStateProvider); var sm = ScaffoldMessenger.of(context); return Column( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - constraints: const BoxConstraints(maxWidth: 800), + Padding( + padding: kPh20t40, + child: kIsDesktop + ? Text("Settings", + style: Theme.of(context).textTheme.headlineLarge) + : const SizedBox.shrink(), + ), + kIsDesktop + ? const Padding( + padding: kPh20, + child: Divider( + height: 1, + ), + ) + : const SizedBox.shrink(), + Expanded( child: ListView( - padding: kPh20t40, shrinkWrap: true, + padding: kPh20, children: [ - kIsDesktop - ? Text("Settings", - style: Theme.of(context).textTheme.headlineLarge) - : const SizedBox.shrink(), - kIsDesktop ? const Divider() : const SizedBox.shrink(), SwitchListTile( contentPadding: EdgeInsets.zero, hoverColor: kColorTransparent, @@ -114,26 +118,18 @@ class _SettingsPageState extends ConsumerState { title: const Text('Export Data'), subtitle: const Text( 'Export your collection to HAR (HTTP Archive format).\nVersion control this file or import in other API clients.'), - trailing: FilledButton( + trailing: FilledButton.icon( onPressed: () async { - var message = ""; - try { - var data = await ref - .read(collectionStateNotifierProvider.notifier) - .exportDataToHAR(); - var pth = await getFileDownloadpath(null, "har"); - if (pth != null) { - await saveFile(pth, jsonMapToBytes(data)); - var sp = getShortPath(pth); - message = 'Saved to $sp'; - } - } catch (e) { - message = "An error occurred while exporting."; - } - sm.hideCurrentSnackBar(); - sm.showSnackBar(getSnackBar(message, small: false)); + var data = await ref + .read(collectionStateNotifierProvider.notifier) + .exportDataToHAR(); + await saveCollection(data, sm); }, - child: const Text("Export Data"), + label: const Text("Export"), + icon: const Icon( + Icons.arrow_outward_rounded, + size: 20, + ), ), ), ListTile( @@ -141,7 +137,7 @@ class _SettingsPageState extends ConsumerState { hoverColor: kColorTransparent, title: const Text('Clear Data'), subtitle: const Text('Delete all requests data from the disk'), - trailing: FilledButton.tonal( + trailing: FilledButton.tonalIcon( style: FilledButton.styleFrom( backgroundColor: settings.isDark ? kColorDarkDanger @@ -185,7 +181,11 @@ class _SettingsPageState extends ConsumerState { ], ), ), - child: const Text("Clear Data"), + label: const Text("Clear"), + icon: const Icon( + Icons.delete_forever_rounded, + size: 20, + ), ), ), ],