Merge pull request #433 from DenserMeerkat/resolve-code-tab

fix: refactored ui
This commit is contained in:
Ashita Prasad
2024-08-10 21:05:00 +05:30
committed by GitHub
7 changed files with 72 additions and 73 deletions

View File

@ -20,10 +20,7 @@ class _HistoryDetailsState extends ConsumerState<HistoryDetails>
Widget build(BuildContext context) {
final selectedHistoryRequest =
ref.watch(selectedHistoryRequestModelProvider);
final metaData = selectedHistoryRequest?.metaData;
final codePaneVisible = ref.watch(historyCodePaneVisibleStateProvider);
final TabController controller =
useTabController(initialLength: 3, vsync: this);
@ -37,8 +34,7 @@ class _HistoryDetailsState extends ConsumerState<HistoryDetails>
Padding(
padding: kPh4,
child: HistoryURLCard(
method: metaData!.method,
url: metaData.url,
historyRequestModel: selectedHistoryRequest,
)),
kVSpacer10,
if (isCompact) ...[
@ -72,16 +68,8 @@ class _HistoryDetailsState extends ConsumerState<HistoryDetails>
padding: kPh4,
child: RequestDetailsCard(
child: EqualSplitView(
leftWidget: Column(
children: [
Expanded(
child: HistoryRequestPane(
isCompact: isCompact,
),
),
const HistoryPageBottombar(),
],
),
leftWidget:
HistoryRequestPane(isCompact: isCompact),
rightWidget: codePaneVisible
? const CodePane(isHistoryRequest: true)
: const HistoryResponsePane(),

View File

@ -17,6 +17,7 @@ class HistoryActionButtons extends ConsumerWidget {
element.id == historyRequestModel?.metaData.requestId) ??
false;
final requestId = historyRequestModel?.metaData.requestId;
return FilledButtonGroup(buttons: [
ButtonData(
icon: Icons.copy_rounded,

View File

@ -1,23 +1,27 @@
import 'package:flutter/material.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/utils/utils.dart';
import 'package:apidash/consts.dart';
import 'his_action_buttons.dart';
class HistoryURLCard extends StatelessWidget {
const HistoryURLCard({
super.key,
required this.method,
required this.url,
required this.historyRequestModel,
});
final HTTPVerb method;
final String url;
final HistoryRequestModel? historyRequestModel;
@override
Widget build(BuildContext context) {
final method = historyRequestModel?.metaData.method;
final url = historyRequestModel?.metaData.url;
final fontSize = Theme.of(context).textTheme.titleMedium?.fontSize;
return LayoutBuilder(builder: (context, constraints) {
final isCompact = constraints.maxWidth <= kMinWindowSize.width;
final isExpanded = constraints.maxWidth >= kMediumWindowWidth;
return Card(
color: kColorTransparent,
surfaceTintColor: kColorTransparent,
@ -37,7 +41,7 @@ class HistoryURLCard extends StatelessWidget {
children: [
isCompact ? const SizedBox.shrink() : kHSpacer10,
Text(
method.name.toUpperCase(),
method!.name.toUpperCase(),
style: kCodeStyle.copyWith(
fontSize: fontSize,
fontWeight: FontWeight.bold,
@ -55,7 +59,12 @@ class HistoryURLCard extends StatelessWidget {
fontSize: fontSize,
),
),
)
),
isExpanded
? HistoryActionButtons(
historyRequestModel: historyRequestModel,
)
: const SizedBox.shrink()
],
),
),

View File

@ -1,3 +1,4 @@
import 'package:apidash/screens/common_widgets/common_widgets.dart';
import 'package:flutter/material.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart';
@ -5,8 +6,8 @@ import '../../home_page/editor_pane/details_card/response_pane.dart';
import '../../home_page/editor_pane/editor_request.dart';
import '../../home_page/editor_pane/url_card.dart';
class RequestResponseTabs extends StatelessWidget {
const RequestResponseTabs({super.key, required this.controller});
class RequestTabs extends StatelessWidget {
const RequestTabs({super.key, required this.controller});
final TabController controller;
@override
@ -24,16 +25,17 @@ class RequestResponseTabs extends StatelessWidget {
tabs: const [
Tab(text: kLabelRequest),
Tab(text: kLabelResponse),
Tab(text: kLabelCode),
],
),
Expanded(child: RequestResponseTabviews(controller: controller))
Expanded(child: RequestTabviews(controller: controller))
],
);
}
}
class RequestResponseTabviews extends StatelessWidget {
const RequestResponseTabviews({super.key, required this.controller});
class RequestTabviews extends StatelessWidget {
const RequestTabviews({super.key, required this.controller});
final TabController controller;
@override
@ -46,6 +48,7 @@ class RequestResponseTabviews extends StatelessWidget {
padding: kPt8,
child: ResponsePane(),
),
CodePane(),
],
);
}

View File

@ -9,8 +9,7 @@ import '../../home_page/collection_pane.dart';
import '../../home_page/editor_pane/url_card.dart';
import '../../home_page/editor_pane/editor_default.dart';
import '../../common_widgets/common_widgets.dart';
import '../widgets/page_base.dart';
import 'request_response_tabs.dart';
import 'request_tabs.dart';
class RequestResponsePage extends StatefulHookConsumerWidget {
const RequestResponsePage({
@ -29,8 +28,8 @@ class _RequestResponsePageState extends ConsumerState<RequestResponsePage>
final id = ref.watch(selectedIdStateProvider);
final name = getRequestTitleFromUrl(
ref.watch(selectedRequestModelProvider.select((value) => value?.name)));
final TabController requestResponseTabController =
useTabController(initialLength: 2, vsync: this);
final TabController requestTabController =
useTabController(initialLength: 3, vsync: this);
return DrawerSplitView(
scaffoldKey: kHomeScaffoldKey,
title: EditorTitle(
@ -55,11 +54,11 @@ class _RequestResponsePageState extends ConsumerState<RequestResponsePage>
actions: const [Padding(padding: kPh8, child: EnvironmentDropdown())],
mainContent: id == null
? const RequestEditorDefault()
: RequestResponseTabs(
controller: requestResponseTabController,
: RequestTabs(
controller: requestTabController,
),
bottomNavigationBar: RequestResponsePageBottombar(
requestResponseTabController: requestResponseTabController,
requestTabController: requestTabController,
),
onDrawerChanged: (value) =>
ref.read(leftDrawerStateProvider.notifier).state = value,
@ -67,16 +66,15 @@ class _RequestResponsePageState extends ConsumerState<RequestResponsePage>
}
}
class RequestResponsePageBottombar extends ConsumerWidget {
class RequestResponsePageBottombar extends StatelessWidget {
const RequestResponsePageBottombar({
super.key,
required this.requestResponseTabController,
required this.requestTabController,
});
final TabController requestResponseTabController;
final TabController requestTabController;
@override
Widget build(BuildContext context, WidgetRef ref) {
final selecetdId = ref.watch(selectedIdStateProvider);
Widget build(BuildContext context) {
return Padding(
padding: MediaQuery.of(context).viewInsets,
child: Container(
@ -97,36 +95,14 @@ class RequestResponsePageBottombar extends ConsumerWidget {
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton.filledTonal(
style: IconButton.styleFrom(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(12)),
),
),
onPressed: selecetdId == null
? null
: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const PageBase(
title: 'View Code',
scaffoldBody: CodePane(),
addBottomPadding: false,
),
fullscreenDialog: true,
),
);
},
icon: const Icon(Icons.code_rounded),
),
const Spacer(),
SizedBox(
height: 36,
child: SendRequestButton(
onTap: () {
if (requestResponseTabController.index != 1) {
requestResponseTabController.animateTo(1);
if (requestTabController.index != 1) {
requestTabController.animateTo(1);
}
},
),

View File

@ -184,9 +184,19 @@ class SettingsPage extends ConsumerWidget {
: () => showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
icon: const Icon(Icons.manage_history_rounded),
iconColor: settings.isDark
? kColorDarkDanger
: kColorLightDanger,
title: const Text('Clear Data'),
content: const Text(
'This action will clear all the requests data from the disk and is irreversible. Do you want to proceed?'),
titleTextStyle:
Theme.of(context).textTheme.titleLarge,
content: ConstrainedBox(
constraints:
const BoxConstraints(maxWidth: 300),
child: const Text(
'This action will clear all the requests data from the disk and is irreversible. Do you want to proceed?'),
),
actions: <Widget>[
TextButton(
onPressed: () =>

View File

@ -1,3 +1,4 @@
import 'package:apidash/consts.dart';
import 'package:flutter/material.dart';
showRenameDialog(
@ -13,19 +14,30 @@ showRenameDialog(
controller.selection =
TextSelection(baseOffset: 0, extentOffset: controller.text.length);
return AlertDialog(
icon: const Icon(Icons.edit_rounded),
iconColor: Theme.of(context).colorScheme.primary,
title: Text(dialogTitle),
content: TextField(
autofocus: true,
controller: controller,
decoration: const InputDecoration(hintText: "Enter new name"),
titleTextStyle: Theme.of(context).textTheme.titleLarge,
content: Container(
padding: kPt20,
width: 300,
child: TextField(
autofocus: true,
controller: controller,
decoration: const InputDecoration(
hintText: "Enter new name",
border: OutlineInputBorder(
borderRadius: kBorderRadius12,
)),
),
),
actions: <Widget>[
OutlinedButton(
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text('CANCEL')),
FilledButton(
child: const Text('Cancel')),
TextButton(
onPressed: () {
final val = controller.text.trim();
onRename(val);
@ -34,7 +46,7 @@ showRenameDialog(
controller.dispose();
});
},
child: const Text('OK')),
child: const Text('Ok')),
],
);
});