feat(store): show module maintainers (0.79.0)
Some checks failed
Security / Security check (push) Failing after 2s
Some checks failed
Security / Security check (push) Failing after 2s
The detail sheet always answers 'who maintains this?': one selectable line per maintainer from the store index's new maintainers list, or an honest 'not specified' when the index names nobody (StoreMaintainersSection, public for the widget tests). The install trust gate carries the same fact when present and stays terse otherwise. DE+EN; dialog-harness proof captured with the maintainer row. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
66886389a6
commit
351c5a82bc
13 changed files with 198 additions and 2 deletions
|
|
@ -2686,6 +2686,7 @@ class _StoreDetailSheetState extends State<_StoreDetailSheet> {
|
|||
_DocsPanel(text: _docsResult!.text),
|
||||
const SizedBox(height: ChainSpace.lg),
|
||||
],
|
||||
StoreMaintainersSection(maintainers: item.maintainers),
|
||||
if (item.repository.isNotEmpty) ...[
|
||||
_SectionHeader(l.storeSectionSource),
|
||||
const SizedBox(height: ChainSpace.sm),
|
||||
|
|
@ -3835,6 +3836,44 @@ class _ProvenancePill extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
/// Who maintains this module — always shown in the detail sheet
|
||||
/// (decision-maker transparency, same motivation as the About
|
||||
/// page): one selectable line per maintainer, and an honest
|
||||
/// "not specified" when the store index names nobody. Public so
|
||||
/// the widget test pumps both states directly.
|
||||
class StoreMaintainersSection extends StatelessWidget {
|
||||
final List<String> maintainers;
|
||||
|
||||
const StoreMaintainersSection({super.key, required this.maintainers});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
final l = AppLocalizations.of(context)!;
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_SectionHeader(l.storeSectionMaintainers),
|
||||
const SizedBox(height: ChainSpace.sm),
|
||||
if (maintainers.isEmpty)
|
||||
Text(
|
||||
l.storeMaintainersNone,
|
||||
style: theme.textTheme.bodySmall?.copyWith(
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
),
|
||||
)
|
||||
else
|
||||
for (final m in maintainers)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(bottom: 2),
|
||||
child: SelectableText(m, style: theme.textTheme.bodySmall),
|
||||
),
|
||||
const SizedBox(height: ChainSpace.lg),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Signature-verification warning pill. Same philosophy as the
|
||||
/// provenance pill: the GOOD path (signature checked at install)
|
||||
/// stays quiet, and so does the policy-off case — that one is a
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue