From f98218457a6dbaf726e88aba3ca34fae6f09f4f9 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Sun, 29 Jun 2025 01:23:48 +0530 Subject: [PATCH] update widgets --- lib/widgets/button_learn.dart | 38 +++++++++++++++++ lib/widgets/editor_code.dart | 53 +++++++++++++++++++++++ lib/widgets/scripts_editor_pane.dart | 63 ---------------------------- lib/widgets/widgets.dart | 2 + 4 files changed, 93 insertions(+), 63 deletions(-) create mode 100644 lib/widgets/button_learn.dart create mode 100644 lib/widgets/editor_code.dart delete mode 100644 lib/widgets/scripts_editor_pane.dart diff --git a/lib/widgets/button_learn.dart b/lib/widgets/button_learn.dart new file mode 100644 index 00000000..49b9d21c --- /dev/null +++ b/lib/widgets/button_learn.dart @@ -0,0 +1,38 @@ +import 'package:apidash_design_system/apidash_design_system.dart'; +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class LearnButton extends StatelessWidget { + const LearnButton({ + super.key, + this.label, + this.icon, + this.url, + }); + + final String? label; + final IconData? icon; + final String? url; + + @override + Widget build(BuildContext context) { + var textLabel = label ?? 'Learn'; + return SizedBox( + height: 24, + child: ADFilledButton( + icon: Icons.help, + iconSize: kButtonIconSizeSmall, + label: textLabel, + isTonal: true, + buttonStyle: ButtonStyle( + padding: WidgetStatePropertyAll(kP10), + ), + onPressed: () { + if (url != null) { + launchUrl(Uri.parse(url!)); + } + }, + ), + ); + } +} diff --git a/lib/widgets/editor_code.dart b/lib/widgets/editor_code.dart new file mode 100644 index 00000000..cb895603 --- /dev/null +++ b/lib/widgets/editor_code.dart @@ -0,0 +1,53 @@ +import 'package:apidash/providers/settings_providers.dart'; +import 'package:apidash_design_system/apidash_design_system.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_code_editor/flutter_code_editor.dart'; +import 'package:flutter_highlight/themes/monokai.dart'; +import 'package:flutter_highlight/themes/xcode.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class CodeEditor extends ConsumerWidget { + final bool readOnly; + final CodeController controller; + const CodeEditor({ + super.key, + required this.controller, + this.readOnly = false, + }); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final settings = ref.watch(settingsProvider); + return CodeTheme( + data: CodeThemeData( + styles: settings.isDark ? monokaiTheme : xcodeTheme, + ), + child: CodeField( + expands: true, + decoration: BoxDecoration( + borderRadius: kBorderRadius8, + border: BoxBorder.all( + color: Theme.of(context).colorScheme.surfaceContainerHighest, + ), + color: Theme.of(context).colorScheme.surfaceContainerLowest, + ), + readOnly: readOnly, + smartDashesType: SmartDashesType.enabled, + smartQuotesType: SmartQuotesType.enabled, + background: Theme.of(context).colorScheme.surfaceContainerLowest, + gutterStyle: GutterStyle( + width: 0, // TODO: Fix numbers size + margin: 2, + textAlign: TextAlign.left, + showFoldingHandles: false, + showLineNumbers: false, + ), + cursorColor: Theme.of(context).colorScheme.primary, + controller: controller, + textStyle: kCodeStyle.copyWith( + fontSize: Theme.of(context).textTheme.bodyMedium?.fontSize, + ), + ), + ); + } +} diff --git a/lib/widgets/scripts_editor_pane.dart b/lib/widgets/scripts_editor_pane.dart deleted file mode 100644 index f2d795a0..00000000 --- a/lib/widgets/scripts_editor_pane.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:apidash/providers/settings_providers.dart'; -import 'package:apidash_design_system/apidash_design_system.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_code_editor/flutter_code_editor.dart'; -import 'package:flutter_highlight/themes/monokai.dart'; -import 'package:flutter_highlight/themes/xcode.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -class ScriptsEditorPane extends ConsumerStatefulWidget { - final bool readOnly; - final CodeController controller; - const ScriptsEditorPane({ - super.key, - required this.controller, - this.readOnly = false, - }); - - @override - ConsumerState createState() => _ScriptsEditorPaneState(); -} - -class _ScriptsEditorPaneState extends ConsumerState { - @override - Widget build(BuildContext context) { - final settings = ref.watch(settingsProvider); - return Padding( - padding: kPt5o10, - child: CodeTheme( - data: CodeThemeData( - styles: settings.isDark ? monokaiTheme : xcodeTheme, - ), - child: SingleChildScrollView( - child: CodeField( - minLines: 35, - readOnly: widget.readOnly, - smartDashesType: SmartDashesType.enabled, - smartQuotesType: SmartQuotesType.enabled, - background: Theme.of(context).colorScheme.surfaceContainerLowest, - gutterStyle: GutterStyle( - width: 40, // TODO: Fix numbers size - margin: 2, - textAlign: TextAlign.left, - showFoldingHandles: false, - showLineNumbers: false, - ), - cursorColor: Theme.of(context).colorScheme.primary, - controller: widget.controller, - textStyle: kCodeStyle.copyWith( - fontSize: Theme.of(context).textTheme.bodyMedium?.fontSize, - ), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(9), - border: Border.all( - color: Theme.of(context).colorScheme.surfaceContainerHighest, - ), - color: Theme.of(context).colorScheme.surfaceContainerLowest, - ), - ), - ), - ), - ); - } -} diff --git a/lib/widgets/widgets.dart b/lib/widgets/widgets.dart index 809eb561..aea1f5b1 100644 --- a/lib/widgets/widgets.dart +++ b/lib/widgets/widgets.dart @@ -3,6 +3,7 @@ export 'button_copy.dart'; export 'button_discord.dart'; export 'button_form_data_file.dart'; export 'button_group_filled.dart'; +export 'button_learn.dart'; export 'button_repo.dart'; export 'button_save_download.dart'; export 'button_send.dart'; @@ -23,6 +24,7 @@ export 'dropdown_content_type.dart'; export 'dropdown_formdata.dart'; export 'dropdown_http_method.dart'; export 'dropdown_import_format.dart'; +export 'editor_code.dart'; export 'editor_json.dart'; export 'editor.dart'; export 'error_message.dart';