feat(#526): relocate About to its own top-level Settings category

About moves out of the Debug pane into a top-level 'About' category (its own
pane, not the stock dialog). Keeps the marketing version display, adds a
description + refreshed legalese (Offband, zjs81/MeshCore MIT attribution kept),
and a View licenses row (showLicensePage). Build identity stays in Device Info
(#553). #527 adds the outbound links here next. Part of epic #525.

Agent: QuietSnow (session 31eaba02)
pull/560/head
Strycher 2 months ago
parent 583e513fc9
commit 9b1d0fbc7d

@ -246,8 +246,9 @@
}
}
},
"settings_aboutLegalese": "2026 MeshCore Open Source Project",
"settings_aboutDescription": "An open-source Flutter client for MeshCore LoRa mesh networking devices.",
"settings_aboutLegalese": "© 2026 Offband. Based on MeshCore Open by zjs81, MIT licensed.",
"settings_aboutDescription": "Offband Meshcore is an open-source client for MeshCore LoRa mesh networking devices.",
"settings_aboutLicenses": "View licenses",
"settings_aboutOpenMeteoAttribution": "LOS elevation data: Open-Meteo (CC BY 4.0)",
"settings_infoName": "Name",
"settings_infoId": "ID",

@ -1195,15 +1195,21 @@ abstract class AppLocalizations {
/// No description provided for @settings_aboutLegalese.
///
/// In en, this message translates to:
/// **'2026 MeshCore Open Source Project'**
/// **'© 2026 Offband. Based on MeshCore Open by zjs81, MIT licensed.'**
String get settings_aboutLegalese;
/// No description provided for @settings_aboutDescription.
///
/// In en, this message translates to:
/// **'An open-source Flutter client for MeshCore LoRa mesh networking devices.'**
/// **'Offband Meshcore is an open-source client for MeshCore LoRa mesh networking devices.'**
String get settings_aboutDescription;
/// No description provided for @settings_aboutLicenses.
///
/// In en, this message translates to:
/// **'View licenses'**
String get settings_aboutLicenses;
/// No description provided for @settings_aboutOpenMeteoAttribution.
///
/// In en, this message translates to:

@ -612,6 +612,9 @@ class AppLocalizationsBg extends AppLocalizations {
String get settings_aboutDescription =>
'Отворен софтуер за Flutter клиент за MeshCore LoRa мрежови устройства.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Данни за надморска височина на LOS: Open-Meteo (CC BY 4.0)';

@ -607,6 +607,9 @@ class AppLocalizationsDe extends AppLocalizations {
String get settings_aboutDescription =>
'Ein Open-Source-Flutter-Client für MeshCore LoRa-Meshnetzwerkgeräte.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS-Höhendaten: Open-Meteo (CC BY 4.0)';

@ -591,11 +591,15 @@ class AppLocalizationsEn extends AppLocalizations {
}
@override
String get settings_aboutLegalese => '2026 MeshCore Open Source Project';
String get settings_aboutLegalese =>
'© 2026 Offband. Based on MeshCore Open by zjs81, MIT licensed.';
@override
String get settings_aboutDescription =>
'An open-source Flutter client for MeshCore LoRa mesh networking devices.';
'Offband Meshcore is an open-source client for MeshCore LoRa mesh networking devices.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>

@ -608,6 +608,9 @@ class AppLocalizationsEs extends AppLocalizations {
String get settings_aboutDescription =>
'Un cliente de código abierto de Flutter para dispositivos de red mesh LoRa de MeshCore.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Datos de elevación LOS: Open-Meteo (CC BY 4.0)';

@ -612,6 +612,9 @@ class AppLocalizationsFr extends AppLocalizations {
String get settings_aboutDescription =>
'Un client Flutter open source pour les appareils de réseau mesh MeshCore LoRa.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Données d\'élévation LOS : Open-Meteo (CC BY 4.0)';

@ -610,6 +610,9 @@ class AppLocalizationsHu extends AppLocalizations {
String get settings_aboutDescription =>
'Egy nyílt forráskódú Flutter kliens a MeshCore LoRa hálózati eszközök számára.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS magassági adatok: Open-Meteo (CC BY 4.0)';

@ -610,6 +610,9 @@ class AppLocalizationsIt extends AppLocalizations {
String get settings_aboutDescription =>
'Un client Flutter open-source per i dispositivi di rete mesh LoRa Core di MeshCore.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Dati di elevazione LOS: Open-Meteo (CC BY 4.0)';

@ -583,6 +583,9 @@ class AppLocalizationsJa extends AppLocalizations {
String get settings_aboutDescription =>
'MeshCore LoRaメッシュネットワークデバイス用の、オープンソースのFlutterクライアント。';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS 標高データ:Open-Meteo (CC BY 4.0)';

@ -583,6 +583,9 @@ class AppLocalizationsKo extends AppLocalizations {
String get settings_aboutDescription =>
'MeshCore LoRa 메시 네트워크 장치를 위한 오픈 소스 Flutter 클라이언트.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS 고도 데이터: Open-Meteo (CC BY 4.0)';

@ -604,6 +604,9 @@ class AppLocalizationsNl extends AppLocalizations {
String get settings_aboutDescription =>
'Een open-source Flutter client voor MeshCore LoRa mesh netwerkapparaten.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS-hoogtegegevens: Open-Meteo (CC BY 4.0)';

@ -612,6 +612,9 @@ class AppLocalizationsPl extends AppLocalizations {
String get settings_aboutDescription =>
'Otwartoźródłowy klient Flutter dla urządzeń MeshCore LoRa do sieci mesh.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Dane wysokościowe LOS: Open-Meteo (CC BY 4.0)';

@ -610,6 +610,9 @@ class AppLocalizationsPt extends AppLocalizations {
String get settings_aboutDescription =>
'Um cliente Flutter de código aberto para dispositivos de rede mesh LoRa Core da MeshCore.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Dados de elevação LOS: Open-Meteo (CC BY 4.0)';

@ -609,6 +609,9 @@ class AppLocalizationsRu extends AppLocalizations {
String get settings_aboutDescription =>
'Открытое клиентское приложение на Flutter для устройств MeshCore с LoRa-сетями.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Данные о высоте LOS: Open-Meteo (CC BY 4.0)';

@ -604,6 +604,9 @@ class AppLocalizationsSk extends AppLocalizations {
String get settings_aboutDescription =>
'Otvorený zdrojový Flutter klient pre MeshCore LoRa sieťové zariadenia.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Údaje o nadmorskej výške LOS: Open-Meteo (CC BY 4.0)';

@ -601,6 +601,9 @@ class AppLocalizationsSl extends AppLocalizations {
String get settings_aboutDescription =>
'Odprtokodni Flutter klient za naprave za LoRa omrežje MeshCore.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Podatki o višini LOS: Open-Meteo (CC BY 4.0)';

@ -599,6 +599,9 @@ class AppLocalizationsSv extends AppLocalizations {
String get settings_aboutDescription =>
'En öppen källkods Flutter-klient för MeshCore LoRa meshnätverksenheter.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS-höjddata: Open-Meteo (CC BY 4.0)';

@ -607,6 +607,9 @@ class AppLocalizationsUk extends AppLocalizations {
String get settings_aboutDescription =>
'Клієнт Flutter з відкритим вихідним кодом для пристроїв мережі MeshCore LoRa.';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'Дані про висоту LOS: Open-Meteo (CC BY 4.0)';

@ -575,6 +575,9 @@ class AppLocalizationsZh extends AppLocalizations {
String get settings_aboutDescription =>
'一个开源的 Flutter 客户端,用于 MeshCore LoRa 无线网络设备。';
@override
String get settings_aboutLicenses => 'View licenses';
@override
String get settings_aboutOpenMeteoAttribution =>
'LOS 高程数据:Open-Meteo (CC BY 4.0)';

@ -228,6 +228,11 @@ class _SettingsScreenState extends State<SettingsScreen> {
title: l10n.settings_debug,
builder: _diagnosticsPane,
),
SettingsCategory(
icon: Icons.info_outline,
title: l10n.settings_about,
builder: _aboutPane,
),
];
}
@ -526,8 +531,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
_buildDebugCard(context),
const SizedBox(height: 16),
_buildExportCard(connector),
const SizedBox(height: 16),
_buildAboutCard(context),
],
);
}
@ -762,19 +765,57 @@ class _SettingsScreenState extends State<SettingsScreen> {
);
}
Widget _buildAboutCard(BuildContext context) {
// About is its own top-level Settings category (#525/#526), no longer a card
// in the Debug pane. Outbound links (offband.org / Play / donate) added by
// #527 between the info block and the licenses row.
Widget _aboutPane(BuildContext context) {
final l10n = context.l10n;
return Card(
child: ListTile(
leading: const Icon(Icons.info_outline),
title: Text(l10n.settings_about),
subtitle: Text(
l10n.settings_aboutVersion(
_appVersion.isEmpty ? l10n.common_loading : _appVersion,
return ListView(
padding: const EdgeInsets.all(16),
children: [
Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ListTile(
leading: const Icon(Icons.info_outline),
title: Text(l10n.appTitle),
subtitle: Text(
l10n.settings_aboutVersion(
_appVersion.isEmpty ? l10n.common_loading : _appVersion,
),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(16, 0, 16, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(l10n.settings_aboutDescription),
const SizedBox(height: 12),
Text(
l10n.settings_aboutLegalese,
style: Theme.of(context).textTheme.bodySmall,
),
],
),
),
const Divider(height: 1),
ListTile(
leading: const Icon(Icons.description_outlined),
title: Text(l10n.settings_aboutLicenses),
trailing: const Icon(Icons.chevron_right),
onTap: () => showLicensePage(
context: context,
applicationName: l10n.appTitle,
applicationVersion: _appVersion.isEmpty ? null : _appVersion,
applicationLegalese: l10n.settings_aboutLegalese,
),
),
],
),
),
onTap: () => _showAbout(context),
),
],
);
}
@ -1422,22 +1463,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
);
}
void _showAbout(BuildContext context) {
final l10n = context.l10n;
showAboutDialog(
context: context,
applicationName: l10n.appTitle,
applicationVersion: _appVersion.isEmpty
? l10n.common_loading
: _appVersion,
applicationLegalese: l10n.settings_aboutLegalese,
children: [
const SizedBox(height: 16),
Text(l10n.settings_aboutDescription),
],
);
}
Future<void> _gpxExport(
GpxExport exporter,
String name,

@ -23,6 +23,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -126,6 +127,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -229,6 +231,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -332,6 +335,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -435,6 +439,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -538,6 +543,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -641,6 +647,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -744,6 +751,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -847,6 +855,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -950,6 +959,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1053,6 +1063,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1156,6 +1167,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1259,6 +1271,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1362,6 +1375,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1465,6 +1479,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1568,6 +1583,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",
@ -1671,6 +1687,7 @@
"settings_experimentalUnlocked",
"settings_experimentalAlreadyUnlocked",
"settings_experimentalCountdown",
"settings_aboutLicenses",
"settings_infoFirmware",
"settings_infoModel",
"settings_infoOffbandCaps",

Loading…
Cancel
Save

Powered by TurnKey Linux.