mirror of
https://github.com/foss42/apidash.git
synced 2025-08-06 13:51:20 +08:00
Refactoring widgets
This commit is contained in:
@ -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,
|
||||||
|
@ -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(
|
||||||
|
@ -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(
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
Reference in New Issue
Block a user