From aab5b957af07aaf9b191cc49d40349efcb9c1fb8 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 24 Nov 2025 22:43:25 +0800 Subject: [PATCH] :bug: Fix mobile site didn't show domain --- lib/screens/creators/sites/site_detail.dart | 76 +----------------- lib/widgets/sites/site_detail_content.dart | 67 +--------------- lib/widgets/sites/site_info_card.dart | 85 +++++++++++++++++++++ 3 files changed, 89 insertions(+), 139 deletions(-) create mode 100644 lib/widgets/sites/site_info_card.dart diff --git a/lib/screens/creators/sites/site_detail.dart b/lib/screens/creators/sites/site_detail.dart index e7ab1e81..a694efb1 100644 --- a/lib/screens/creators/sites/site_detail.dart +++ b/lib/screens/creators/sites/site_detail.dart @@ -8,18 +8,16 @@ import 'package:island/pods/site_pages.dart'; import 'package:island/widgets/sites/page_form.dart'; import 'package:island/widgets/sites/site_action_menu.dart'; import 'package:island/widgets/sites/site_detail_content.dart'; +import 'package:island/widgets/sites/site_info_card.dart'; import 'package:island/widgets/app_scaffold.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:island/widgets/sites/info_row.dart'; import 'package:island/widgets/sites/pages_section.dart'; import 'package:island/widgets/sites/file_management_section.dart'; import 'package:island/widgets/sites/file_management_action_section.dart'; import 'package:island/services/responsive.dart'; -import 'package:island/services/time.dart'; import 'package:island/widgets/extended_refresh_indicator.dart'; import 'package:styled_widget/styled_widget.dart'; -import 'package:url_launcher/url_launcher_string.dart'; part 'site_detail.g.dart'; @@ -67,7 +65,6 @@ class PublicationSiteDetailScreen extends HookConsumerWidget { ), body: siteAsync.when( data: (site) { - final theme = Theme.of(context); if (isWideScreen(context)) { return ExtendedRefreshIndicator( onRefresh: @@ -99,76 +96,7 @@ class PublicationSiteDetailScreen extends HookConsumerWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Card( - child: Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'siteInformation'.tr(), - style: theme.textTheme.titleMedium - ?.copyWith(fontWeight: FontWeight.bold), - ), - const Gap(16), - InfoRow( - label: 'name'.tr(), - value: site.name, - icon: Symbols.title, - ), - const Gap(8), - InfoRow( - label: 'slug'.tr(), - value: site.slug, - icon: Symbols.tag, - monospace: true, - ), - const Gap(8), - InfoRow( - label: 'siteDomain'.tr(), - value: '${site.slug}.solian.page', - icon: Symbols.globe, - monospace: true, - onTap: () { - final url = - 'https://${site.slug}.solian.page'; - launchUrlString(url); - }, - ), - const Gap(8), - InfoRow( - label: 'siteMode'.tr(), - value: - site.mode == 0 - ? 'siteModeFullyManaged'.tr() - : 'siteModeSelfManaged'.tr(), - icon: Symbols.settings, - ), - if (site.description != null && - site.description!.isNotEmpty) ...[ - const Gap(8), - InfoRow( - label: 'description'.tr(), - value: site.description!, - icon: Symbols.description, - ), - ], - const Gap(8), - InfoRow( - label: 'siteCreated'.tr(), - value: site.createdAt.formatSystem(), - icon: Symbols.calendar_add_on, - ), - const Gap(8), - InfoRow( - label: 'siteUpdated'.tr(), - value: site.updatedAt.formatSystem(), - icon: Symbols.update, - ), - ], - ), - ), - ), + SiteInfoCard(site: site), const Gap(8), if (site.mode == 1) // Self-Managed only FileManagementActionSection( diff --git a/lib/widgets/sites/site_detail_content.dart b/lib/widgets/sites/site_detail_content.dart index 2362aa92..d7bbb5dd 100644 --- a/lib/widgets/sites/site_detail_content.dart +++ b/lib/widgets/sites/site_detail_content.dart @@ -1,15 +1,12 @@ -import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/publication_site.dart'; import 'package:island/widgets/sites/file_management_section.dart'; import 'package:island/widgets/sites/file_management_action_section.dart'; -import 'package:island/widgets/sites/info_row.dart'; +import 'package:island/widgets/sites/site_info_card.dart'; import 'package:island/widgets/sites/pages_section.dart'; -import 'package:island/services/time.dart'; import 'package:island/widgets/extended_refresh_indicator.dart'; -import 'package:material_symbols_icons/symbols.dart'; import 'package:island/screens/creators/sites/site_detail.dart'; class SiteDetailContent extends HookConsumerWidget { @@ -24,8 +21,6 @@ class SiteDetailContent extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final theme = Theme.of(context); - return ExtendedRefreshIndicator( onRefresh: () async => @@ -36,65 +31,7 @@ class SiteDetailContent extends HookConsumerWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ // Site Info Card - Card( - child: Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'siteInformation'.tr(), - style: theme.textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.bold, - ), - ), - const Gap(16), - InfoRow( - label: 'name'.tr(), - value: site.name, - icon: Symbols.title, - ), - const Gap(8), - InfoRow( - label: 'slug'.tr(), - value: site.slug, - icon: Symbols.tag, - monospace: true, - ), - const Gap(8), - InfoRow( - label: 'Mode', - value: - site.mode == 0 - ? 'siteModeFullyManaged'.tr() - : 'siteModeSelfManaged'.tr(), - icon: Symbols.settings, - ), - if (site.description != null && - site.description!.isNotEmpty) ...[ - const Gap(8), - InfoRow( - label: 'description'.tr(), - value: site.description!, - icon: Symbols.description, - ), - ], - const Gap(8), - InfoRow( - label: 'siteCreated'.tr(), - value: site.createdAt.formatSystem(), - icon: Symbols.calendar_add_on, - ), - const Gap(8), - InfoRow( - label: 'siteUpdated'.tr(), - value: site.updatedAt.formatSystem(), - icon: Symbols.update, - ), - ], - ), - ), - ), + SiteInfoCard(site: site), const Gap(8), if (site.mode == 1) // Self-Managed only FileManagementActionSection(site: site, pubName: pubName), diff --git a/lib/widgets/sites/site_info_card.dart b/lib/widgets/sites/site_info_card.dart new file mode 100644 index 00000000..e65b3260 --- /dev/null +++ b/lib/widgets/sites/site_info_card.dart @@ -0,0 +1,85 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:island/models/publication_site.dart'; +import 'package:island/services/time.dart'; +import 'package:island/widgets/sites/info_row.dart'; +import 'package:material_symbols_icons/symbols.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + +class SiteInfoCard extends StatelessWidget { + final SnPublicationSite site; + + const SiteInfoCard({super.key, required this.site}); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Card( + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'siteInformation'.tr(), + style: theme.textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + const Gap(16), + InfoRow(label: 'name'.tr(), value: site.name, icon: Symbols.title), + const Gap(8), + InfoRow( + label: 'slug'.tr(), + value: site.slug, + icon: Symbols.tag, + monospace: true, + ), + const Gap(8), + InfoRow( + label: 'siteDomain'.tr(), + value: '${site.slug}.solian.page', + icon: Symbols.globe, + monospace: true, + onTap: () { + final url = 'https://${site.slug}.solian.page'; + launchUrlString(url); + }, + ), + const Gap(8), + InfoRow( + label: 'siteMode'.tr(), + value: + site.mode == 0 + ? 'siteModeFullyManaged'.tr() + : 'siteModeSelfManaged'.tr(), + icon: Symbols.settings, + ), + if (site.description != null && site.description!.isNotEmpty) ...[ + const Gap(8), + InfoRow( + label: 'description'.tr(), + value: site.description!, + icon: Symbols.description, + ), + ], + const Gap(8), + InfoRow( + label: 'siteCreated'.tr(), + value: site.createdAt.formatSystem(), + icon: Symbols.calendar_add_on, + ), + const Gap(8), + InfoRow( + label: 'siteUpdated'.tr(), + value: site.updatedAt.formatSystem(), + icon: Symbols.update, + ), + ], + ), + ), + ); + } +}