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 'settings_page.dart';
class Dashboard extends ConsumerStatefulWidget {
class Dashboard extends ConsumerWidget {
const Dashboard({super.key});
@override
ConsumerState<Dashboard> createState() => _DashboardState();
}
class _DashboardState extends ConsumerState<Dashboard> {
@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<Dashboard> {
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<Dashboard> {
TextButton bottomButton(
BuildContext context,
WidgetRef ref,
int railIdx,
int buttonIdx,
IconData selectedIcon,

View File

@ -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<EditorPaneRequestURLCard> createState() =>
_EditorPaneRequestURLCardState();
}
class _EditorPaneRequestURLCardState extends State<EditorPaneRequestURLCard> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Card(
@ -52,25 +41,13 @@ class _EditorPaneRequestURLCardState extends State<EditorPaneRequestURLCard> {
}
}
class DropdownButtonHTTPMethod extends ConsumerStatefulWidget {
class DropdownButtonHTTPMethod extends ConsumerWidget {
const DropdownButtonHTTPMethod({
super.key,
});
@override
ConsumerState<DropdownButtonHTTPMethod> createState() =>
_DropdownButtonHTTPMethodState();
}
class _DropdownButtonHTTPMethodState
extends ConsumerState<DropdownButtonHTTPMethod> {
@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<URLTextField> createState() => _URLTextFieldState();
}
class _URLTextFieldState extends ConsumerState<URLTextField> {
@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<URLTextField> {
}
}
class SendButton extends ConsumerStatefulWidget {
class SendButton extends ConsumerWidget {
const SendButton({
super.key,
});
@override
ConsumerState<SendButton> createState() => _SendButtonState();
}
class _SendButtonState extends ConsumerState<SendButton> {
@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(

View File

@ -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<HomePage> {
@override
Widget build(BuildContext context) {
return const Column(

View File

@ -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<IntroPage> createState() => _IntroPageState();
}
class _IntroPageState extends State<IntroPage> {
@override
Widget build(BuildContext context) {
return const IntroMessage();

View File

@ -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<SettingsPage> createState() => _SettingsPageState();
}
class _SettingsPageState extends ConsumerState<SettingsPage> {
@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<SettingsPage> {
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<SettingsPage> {
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<SettingsPage> {
],
),
),
child: const Text("Clear Data"),
label: const Text("Clear"),
icon: const Icon(
Icons.delete_forever_rounded,
size: 20,
),
),
),
],