diff --git a/lib/extensions/context_extensions.dart b/lib/extensions/context_extensions.dart new file mode 100644 index 00000000..ffe464b5 --- /dev/null +++ b/lib/extensions/context_extensions.dart @@ -0,0 +1,7 @@ +import 'package:apidash/consts.dart'; +import 'package:flutter/material.dart'; + +extension MediaQueryExtension on BuildContext { + bool get isMobile => + kIsMobile && MediaQuery.of(this).size.width < kMinWindowSize.width; +} diff --git a/lib/extensions/extensions.dart b/lib/extensions/extensions.dart index d8c9fa84..1c398f76 100644 --- a/lib/extensions/extensions.dart +++ b/lib/extensions/extensions.dart @@ -1 +1,2 @@ +export 'context_extensions.dart'; export 'string_extensions.dart'; diff --git a/lib/providers/ui_providers.dart b/lib/providers/ui_providers.dart index d1c9160b..248170b9 100644 --- a/lib/providers/ui_providers.dart +++ b/lib/providers/ui_providers.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:inner_drawer/inner_drawer.dart'; -final mobileDrawerKeyProvider = Provider>( +final mobileDrawerKeyProvider = StateProvider>( (ref) => GlobalKey()); final navRailIndexStateProvider = StateProvider((ref) => 0); final selectedIdEditStateProvider = StateProvider((ref) => null); diff --git a/lib/screens/home_page/collection_pane.dart b/lib/screens/home_page/collection_pane.dart index baf19849..3cb9d41f 100644 --- a/lib/screens/home_page/collection_pane.dart +++ b/lib/screens/home_page/collection_pane.dart @@ -4,6 +4,7 @@ import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/models/models.dart'; import 'package:apidash/consts.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class CollectionPane extends ConsumerWidget { const CollectionPane({ @@ -142,8 +143,6 @@ class _RequestListState extends ConsumerState { final alwaysShowCollectionPaneScrollbar = ref.watch(settingsProvider .select((value) => value.alwaysShowCollectionPaneScrollbar)); final filterQuery = ref.watch(searchQueryProvider).trim(); - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; return Scrollbar( controller: controller, @@ -151,7 +150,7 @@ class _RequestListState extends ConsumerState { radius: const Radius.circular(12), child: filterQuery.isEmpty ? ReorderableListView.builder( - padding: isMobile + padding: context.isMobile ? EdgeInsets.only( bottom: MediaQuery.paddingOf(context).bottom, right: 8, diff --git a/lib/screens/home_page/editor_pane/editor_request.dart b/lib/screens/home_page/editor_pane/editor_request.dart index f52262ee..830944ea 100644 --- a/lib/screens/home_page/editor_pane/editor_request.dart +++ b/lib/screens/home_page/editor_pane/editor_request.dart @@ -1,19 +1,18 @@ -import 'package:apidash/screens/home_page/editor_pane/details_card/request_pane/request_pane.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/providers/providers.dart'; import 'package:apidash/consts.dart'; import 'details_card/details_card.dart'; import 'url_card.dart'; +import 'package:apidash/screens/home_page/editor_pane/details_card/request_pane/request_pane.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class RequestEditor extends StatelessWidget { const RequestEditor({super.key}); @override Widget build(BuildContext context) { - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; - return isMobile + return context.isMobile ? const Padding( padding: kPb10, child: Column( diff --git a/lib/screens/home_page/editor_pane/url_card.dart b/lib/screens/home_page/editor_pane/url_card.dart index 910701cc..3ac83ad1 100644 --- a/lib/screens/home_page/editor_pane/url_card.dart +++ b/lib/screens/home_page/editor_pane/url_card.dart @@ -3,14 +3,13 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/consts.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class EditorPaneRequestURLCard extends StatelessWidget { const EditorPaneRequestURLCard({super.key}); @override Widget build(BuildContext context) { - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; return Card( elevation: 0, shape: RoundedRectangleBorder( @@ -22,9 +21,9 @@ class EditorPaneRequestURLCard extends StatelessWidget { child: Padding( padding: EdgeInsets.symmetric( vertical: 5, - horizontal: !isMobile ? 20 : 6, + horizontal: !context.isMobile ? 20 : 6, ), - child: isMobile + child: context.isMobile ? const Row( children: [ DropdownButtonHTTPMethod(), diff --git a/lib/screens/mobile/dashboard.dart b/lib/screens/mobile/dashboard.dart index b1cd59e5..901c5888 100644 --- a/lib/screens/mobile/dashboard.dart +++ b/lib/screens/mobile/dashboard.dart @@ -6,9 +6,9 @@ import 'package:inner_drawer/inner_drawer.dart'; import 'package:flex_color_scheme/flex_color_scheme.dart'; import '../../providers/providers.dart'; import 'navbar.dart'; -import 'left_drawer.dart'; -import 'requests_page/requests_page.dart'; -import 'requests_page/response_drawer.dart'; +import 'widgets/left_drawer.dart'; +import 'requests_page.dart'; +import 'response_drawer.dart'; import '../home_page/collection_pane.dart'; class MobileDashboard extends ConsumerStatefulWidget { diff --git a/lib/screens/mobile/navbar.dart b/lib/screens/mobile/navbar.dart index 9c3ee814..43b092ae 100644 --- a/lib/screens/mobile/navbar.dart +++ b/lib/screens/mobile/navbar.dart @@ -1,5 +1,5 @@ import 'package:apidash/providers/ui_providers.dart'; -import 'package:apidash/screens/mobile/page_base.dart'; +import 'package:apidash/screens/mobile/widgets/page_base.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../settings_page.dart'; diff --git a/lib/screens/mobile/requests_page/requests_page.dart b/lib/screens/mobile/requests_page.dart similarity index 94% rename from lib/screens/mobile/requests_page/requests_page.dart rename to lib/screens/mobile/requests_page.dart index 11bbb7c6..fb41b14d 100644 --- a/lib/screens/mobile/requests_page/requests_page.dart +++ b/lib/screens/mobile/requests_page.dart @@ -5,11 +5,11 @@ import 'package:apidash/providers/providers.dart'; import 'package:apidash/utils/http_utils.dart'; import 'package:apidash/consts.dart'; import 'package:apidash/widgets/widgets.dart'; -import '../../home_page/editor_pane/editor_request.dart'; -import '../../home_page/editor_pane/editor_pane.dart'; -import '../../home_page/editor_pane/url_card.dart'; -import '../../home_page/editor_pane/details_card/code_pane.dart'; -import '../page_base.dart'; +import '../home_page/editor_pane/editor_request.dart'; +import '../home_page/editor_pane/editor_pane.dart'; +import '../home_page/editor_pane/url_card.dart'; +import '../home_page/editor_pane/details_card/code_pane.dart'; +import 'widgets/page_base.dart'; class RequestsPage extends StatelessWidget { final GlobalKey innerDrawerKey; @@ -64,8 +64,7 @@ class RequestTitle extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final id = ref.watch(selectedIdStateProvider); final name = getRequestTitleFromUrl( - ref.watch(selectedRequestModelProvider.select((value) => value?.name)), - capitalize: true); + ref.watch(selectedRequestModelProvider.select((value) => value?.name))); return ClipRRect( borderRadius: BorderRadius.circular(8), child: Material( diff --git a/lib/screens/mobile/requests_page/response_drawer.dart b/lib/screens/mobile/response_drawer.dart similarity index 92% rename from lib/screens/mobile/requests_page/response_drawer.dart rename to lib/screens/mobile/response_drawer.dart index 11c57a51..e7295c27 100644 --- a/lib/screens/mobile/requests_page/response_drawer.dart +++ b/lib/screens/mobile/response_drawer.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../../home_page/editor_pane/details_card/response_pane.dart'; +import '../home_page/editor_pane/details_card/response_pane.dart'; class ResponseDrawer extends StatelessWidget { const ResponseDrawer({super.key}); diff --git a/lib/screens/mobile/left_drawer.dart b/lib/screens/mobile/widgets/left_drawer.dart similarity index 100% rename from lib/screens/mobile/left_drawer.dart rename to lib/screens/mobile/widgets/left_drawer.dart diff --git a/lib/screens/mobile/page_base.dart b/lib/screens/mobile/widgets/page_base.dart similarity index 100% rename from lib/screens/mobile/page_base.dart rename to lib/screens/mobile/widgets/page_base.dart diff --git a/lib/screens/settings_page.dart b/lib/screens/settings_page.dart index a22e8960..c3edacf7 100644 --- a/lib/screens/settings_page.dart +++ b/lib/screens/settings_page.dart @@ -4,6 +4,7 @@ import '../providers/providers.dart'; import '../widgets/widgets.dart'; import '../common/utils.dart'; import '../consts.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class SettingsPage extends ConsumerWidget { const SettingsPage({super.key}); @@ -13,12 +14,10 @@ class SettingsPage extends ConsumerWidget { final settings = ref.watch(settingsProvider); final clearingData = ref.watch(clearDataStateProvider); var sm = ScaffoldMessenger.of(context); - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - !isMobile + !context.isMobile ? Padding( padding: kPh20t40, child: kIsDesktop diff --git a/lib/utils/http_utils.dart b/lib/utils/http_utils.dart index 06b258d3..4688d2af 100644 --- a/lib/utils/http_utils.dart +++ b/lib/utils/http_utils.dart @@ -7,14 +7,14 @@ import '../models/models.dart'; import 'convert_utils.dart' show rowsToMap; import '../consts.dart'; -String getRequestTitleFromUrl(String? url, {bool capitalize = false}) { +String getRequestTitleFromUrl(String? url) { if (url == null || url.trim() == "") { - return !capitalize ? "untitled" : "Untitled"; + return "untitled"; } if (url.contains("://")) { String rem = url.split("://")[1]; if (rem.trim() == "") { - return !capitalize ? "untitled" : "Untitled"; + return "untitled"; } return rem; } diff --git a/lib/widgets/dropdowns.dart b/lib/widgets/dropdowns.dart index 95c644d6..ca74e2da 100644 --- a/lib/widgets/dropdowns.dart +++ b/lib/widgets/dropdowns.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:apidash/utils/utils.dart'; import 'package:apidash/consts.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class DropdownButtonHttpMethod extends StatelessWidget { const DropdownButtonHttpMethod({ @@ -15,8 +16,6 @@ class DropdownButtonHttpMethod extends StatelessWidget { @override Widget build(BuildContext context) { final surfaceColor = Theme.of(context).colorScheme.surface; - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; return DropdownButton( focusColor: surfaceColor, value: method, @@ -31,11 +30,10 @@ class DropdownButtonHttpMethod extends StatelessWidget { return DropdownMenuItem( value: value, child: Padding( - padding: EdgeInsets.only(left: isMobile ? 8 : 16), + padding: EdgeInsets.only(left: context.isMobile ? 8 : 16), child: Text( value.name.toUpperCase(), style: kCodeStyle.copyWith( - fontSize: isMobile ? 13 : null, fontWeight: FontWeight.bold, color: getHTTPMethodColor( value, diff --git a/lib/widgets/request_widgets.dart b/lib/widgets/request_widgets.dart index 9db5f949..d7669b19 100644 --- a/lib/widgets/request_widgets.dart +++ b/lib/widgets/request_widgets.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:apidash/consts.dart'; import 'tabs.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class RequestPane extends StatefulWidget { const RequestPane({ @@ -45,11 +46,9 @@ class _RequestPaneState extends State if (widget.tabIndex != null) { _controller.index = widget.tabIndex!; } - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; return Column( children: [ - isMobile + context.isMobile ? const SizedBox.shrink() : Padding( padding: kP8, diff --git a/lib/widgets/tabs.dart b/lib/widgets/tabs.dart index 1789f992..c15cae1b 100644 --- a/lib/widgets/tabs.dart +++ b/lib/widgets/tabs.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:apidash/consts.dart'; +import 'package:apidash/extensions/extensions.dart' show MediaQueryExtension; class TabLabel extends StatelessWidget { const TabLabel({ @@ -12,10 +13,8 @@ class TabLabel extends StatelessWidget { @override Widget build(BuildContext context) { - final isMobile = - kIsMobile && MediaQuery.sizeOf(context).width < kMinWindowSize.width; return SizedBox( - height: isMobile ? kMobileTabHeight : kTabHeight, + height: context.isMobile ? kMobileTabHeight : kTabHeight, child: Stack( children: [ Center(