Refactoring widgets

This commit is contained in:
Ashita Prasad
2023-12-24 17:21:42 +05:30
parent 5b03a2641b
commit 3423eb7d8f
5 changed files with 54 additions and 111 deletions

View File

@ -6,16 +6,11 @@ import 'home_page/home_page.dart';
import 'intro_page.dart'; import 'intro_page.dart';
import 'settings_page.dart'; import 'settings_page.dart';
class Dashboard extends ConsumerStatefulWidget { class Dashboard extends ConsumerWidget {
const Dashboard({super.key}); const Dashboard({super.key});
@override @override
ConsumerState<Dashboard> createState() => _DashboardState(); Widget build(BuildContext context, WidgetRef ref) {
}
class _DashboardState extends ConsumerState<Dashboard> {
@override
Widget build(BuildContext context) {
final railIdx = ref.watch(navRailIndexStateProvider); final railIdx = ref.watch(navRailIndexStateProvider);
return Scaffold( return Scaffold(
body: SafeArea( body: SafeArea(
@ -50,13 +45,13 @@ class _DashboardState extends ConsumerState<Dashboard> {
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(bottom: 16.0), padding: const EdgeInsets.only(bottom: 16.0),
child: bottomButton(context, railIdx, 1, Icons.help, child: bottomButton(context, ref, railIdx, 1,
Icons.help_outline), Icons.help, Icons.help_outline),
), ),
Padding( Padding(
padding: const EdgeInsets.only(bottom: 16.0), padding: const EdgeInsets.only(bottom: 16.0),
child: bottomButton(context, railIdx, 2, Icons.settings, child: bottomButton(context, ref, railIdx, 2,
Icons.settings_outlined), Icons.settings, Icons.settings_outlined),
), ),
], ],
), ),
@ -99,6 +94,7 @@ class _DashboardState extends ConsumerState<Dashboard> {
TextButton bottomButton( TextButton bottomButton(
BuildContext context, BuildContext context,
WidgetRef ref,
int railIdx, int railIdx,
int buttonIdx, int buttonIdx,
IconData selectedIcon, IconData selectedIcon,

View File

@ -4,20 +4,9 @@ import 'package:apidash/providers/providers.dart';
import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
class EditorPaneRequestURLCard extends StatefulWidget { class EditorPaneRequestURLCard extends StatelessWidget {
const EditorPaneRequestURLCard({super.key}); const EditorPaneRequestURLCard({super.key});
@override
State<EditorPaneRequestURLCard> createState() =>
_EditorPaneRequestURLCardState();
}
class _EditorPaneRequestURLCardState extends State<EditorPaneRequestURLCard> {
@override
void initState() {
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Card( return Card(
@ -52,25 +41,13 @@ class _EditorPaneRequestURLCardState extends State<EditorPaneRequestURLCard> {
} }
} }
class DropdownButtonHTTPMethod extends ConsumerStatefulWidget { class DropdownButtonHTTPMethod extends ConsumerWidget {
const DropdownButtonHTTPMethod({ const DropdownButtonHTTPMethod({
super.key, super.key,
}); });
@override @override
ConsumerState<DropdownButtonHTTPMethod> createState() => Widget build(BuildContext context, WidgetRef ref) {
_DropdownButtonHTTPMethodState();
}
class _DropdownButtonHTTPMethodState
extends ConsumerState<DropdownButtonHTTPMethod> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
final method = final method =
ref.watch(activeRequestModelProvider.select((value) => value?.method)); ref.watch(activeRequestModelProvider.select((value) => value?.method));
return DropdownButtonHttpMethod( return DropdownButtonHttpMethod(
@ -85,23 +62,13 @@ class _DropdownButtonHTTPMethodState
} }
} }
class URLTextField extends ConsumerStatefulWidget { class URLTextField extends ConsumerWidget {
const URLTextField({ const URLTextField({
super.key, super.key,
}); });
@override @override
ConsumerState<URLTextField> createState() => _URLTextFieldState(); Widget build(BuildContext context, WidgetRef ref) {
}
class _URLTextFieldState extends ConsumerState<URLTextField> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
final activeId = ref.watch(activeIdStateProvider); final activeId = ref.watch(activeIdStateProvider);
return URLField( return URLField(
activeId: activeId!, activeId: activeId!,
@ -118,23 +85,13 @@ class _URLTextFieldState extends ConsumerState<URLTextField> {
} }
} }
class SendButton extends ConsumerStatefulWidget { class SendButton extends ConsumerWidget {
const SendButton({ const SendButton({
super.key, super.key,
}); });
@override @override
ConsumerState<SendButton> createState() => _SendButtonState(); Widget build(BuildContext context, WidgetRef ref) {
}
class _SendButtonState extends ConsumerState<SendButton> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
final activeId = ref.watch(activeIdStateProvider); final activeId = ref.watch(activeIdStateProvider);
final sentRequestId = ref.watch(sentRequestIdStateProvider); final sentRequestId = ref.watch(sentRequestIdStateProvider);
return SendRequestButton( return SendRequestButton(

View File

@ -3,14 +3,9 @@ import 'package:apidash/widgets/widgets.dart';
import 'editor_pane/editor_pane.dart'; import 'editor_pane/editor_pane.dart';
import 'collection_pane.dart'; import 'collection_pane.dart';
class HomePage extends StatefulWidget { class HomePage extends StatelessWidget {
const HomePage({super.key}); const HomePage({super.key});
@override
HomePageState createState() => HomePageState();
}
class HomePageState extends State<HomePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const Column( return const Column(

View File

@ -1,14 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/widgets/widgets.dart';
class IntroPage extends StatefulWidget { class IntroPage extends StatelessWidget {
const IntroPage({super.key}); const IntroPage({super.key});
@override
State<IntroPage> createState() => _IntroPageState();
}
class _IntroPageState extends State<IntroPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const IntroMessage(); return const IntroMessage();

View File

@ -2,36 +2,40 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../providers/providers.dart'; import '../providers/providers.dart';
import '../widgets/widgets.dart'; import '../widgets/widgets.dart';
import '../utils/utils.dart'; import '../common/utils.dart';
import 'package:apidash/consts.dart'; import '../consts.dart';
class SettingsPage extends ConsumerStatefulWidget { class SettingsPage extends ConsumerWidget {
const SettingsPage({super.key}); const SettingsPage({super.key});
@override @override
ConsumerState<SettingsPage> createState() => _SettingsPageState(); Widget build(BuildContext context, WidgetRef ref) {
}
class _SettingsPageState extends ConsumerState<SettingsPage> {
@override
Widget build(BuildContext context) {
final settings = ref.watch(settingsProvider); final settings = ref.watch(settingsProvider);
final clearingData = ref.watch(clearDataStateProvider); final clearingData = ref.watch(clearDataStateProvider);
var sm = ScaffoldMessenger.of(context); var sm = ScaffoldMessenger.of(context);
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Container( Padding(
constraints: const BoxConstraints(maxWidth: 800), 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( child: ListView(
padding: kPh20t40,
shrinkWrap: true, shrinkWrap: true,
padding: kPh20,
children: [ children: [
kIsDesktop
? Text("Settings",
style: Theme.of(context).textTheme.headlineLarge)
: const SizedBox.shrink(),
kIsDesktop ? const Divider() : const SizedBox.shrink(),
SwitchListTile( SwitchListTile(
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
hoverColor: kColorTransparent, hoverColor: kColorTransparent,
@ -114,26 +118,18 @@ class _SettingsPageState extends ConsumerState<SettingsPage> {
title: const Text('Export Data'), title: const Text('Export Data'),
subtitle: const Text( subtitle: const Text(
'Export your collection to HAR (HTTP Archive format).\nVersion control this file or import in other API clients.'), '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 { onPressed: () async {
var message = ""; var data = await ref
try { .read(collectionStateNotifierProvider.notifier)
var data = await ref .exportDataToHAR();
.read(collectionStateNotifierProvider.notifier) await saveCollection(data, sm);
.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));
}, },
child: const Text("Export Data"), label: const Text("Export"),
icon: const Icon(
Icons.arrow_outward_rounded,
size: 20,
),
), ),
), ),
ListTile( ListTile(
@ -141,7 +137,7 @@ class _SettingsPageState extends ConsumerState<SettingsPage> {
hoverColor: kColorTransparent, hoverColor: kColorTransparent,
title: const Text('Clear Data'), title: const Text('Clear Data'),
subtitle: const Text('Delete all requests data from the disk'), subtitle: const Text('Delete all requests data from the disk'),
trailing: FilledButton.tonal( trailing: FilledButton.tonalIcon(
style: FilledButton.styleFrom( style: FilledButton.styleFrom(
backgroundColor: settings.isDark backgroundColor: settings.isDark
? kColorDarkDanger ? kColorDarkDanger
@ -185,7 +181,11 @@ class _SettingsPageState extends ConsumerState<SettingsPage> {
], ],
), ),
), ),
child: const Text("Clear Data"), label: const Text("Clear"),
icon: const Icon(
Icons.delete_forever_rounded,
size: 20,
),
), ),
), ),
], ],