fix: drop the duplicate FLOWS panel header, current CLI name in docs (0.24.1)

Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
flemming-it 2026-07-18 00:27:24 +02:00
parent 4e7abec24d
commit 7d6a575cae
6 changed files with 69 additions and 89 deletions

View file

@ -282,7 +282,8 @@ class _FlowEditorPageState extends State<FlowEditorPage>
final commentIdx = line.indexOf('#', colonIdx + 1);
final rhsEnd = commentIdx < 0 ? line.length : commentIdx;
final tail = commentIdx < 0 ? '' : line.substring(rhsEnd);
final newLine = '${line.substring(0, colonIdx + 1)} ${fix.replacement}'
final newLine =
'${line.substring(0, colonIdx + 1)} ${fix.replacement}'
'${tail.isEmpty ? '' : ' $tail'}';
if (newLine == line) return;
lines[fix.line] = newLine;
@ -643,7 +644,8 @@ outputs:
errorCount: _controller.analyzerErrorCount,
onAddStep: _controller.activeName != null ? _addStep : null,
onSave: _controller.activeName != null ? _save : null,
onRun: _controller.activeName != null &&
onRun:
_controller.activeName != null &&
_controller.analyzerErrorCount == 0
? () => _tabs.animateTo(2)
: null,
@ -843,9 +845,7 @@ outputs:
minLines: null,
maxLines: null,
gutterStyle: GutterStyle(
textStyle: mono.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),
textStyle: mono.copyWith(color: theme.colorScheme.onSurfaceVariant),
background: theme.colorScheme.surfaceContainer,
showLineNumbers: true,
// Disable the built-in error column entirely its
@ -1127,9 +1127,7 @@ class _TabActionStrip extends StatelessWidget {
child: CircularProgressIndicator(strokeWidth: 2),
)
: Icon(
errorCount > 0
? Icons.block
: Icons.play_arrow,
errorCount > 0 ? Icons.block : Icons.play_arrow,
size: 18,
),
label: Text(strings.run),
@ -1392,22 +1390,47 @@ class _FileListState extends State<_FileList> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
padding: const EdgeInsets.symmetric(
horizontal: FaiSpace.md,
vertical: FaiSpace.xs,
),
decoration: BoxDecoration(
border: Border(bottom: BorderSide(color: theme.dividerColor)),
// No ALL-CAPS panel header: the page toolbar already says
// "Flows" the duplicate label read as a broken title
// hierarchy (usertest art-director finding). The refresh
// action sits next to the filter instead.
Padding(
padding: const EdgeInsets.fromLTRB(
FaiSpace.md,
FaiSpace.xs,
FaiSpace.md,
FaiSpace.xs,
),
child: Row(
children: [
Expanded(
child: Text(
strings.listHeader,
style: theme.textTheme.labelSmall?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
letterSpacing: 0.6,
child: SizedBox(
height: 28,
child: TextField(
onChanged: (v) => setState(() => _filter = v.trim()),
style: theme.textTheme.bodySmall,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 4,
),
prefixIcon: const Icon(Icons.search, size: 14),
prefixIconConstraints: const BoxConstraints(
minWidth: 28,
minHeight: 28,
),
hintText: strings.listFilterHint,
hintStyle: theme.textTheme.bodySmall?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(FaiRadius.sm),
borderSide: BorderSide(
color: theme.colorScheme.outlineVariant,
),
),
),
),
),
),
@ -1425,43 +1448,6 @@ class _FileListState extends State<_FileList> {
],
),
),
Padding(
padding: const EdgeInsets.fromLTRB(
FaiSpace.md,
FaiSpace.xs,
FaiSpace.md,
FaiSpace.xs,
),
child: SizedBox(
height: 28,
child: TextField(
onChanged: (v) => setState(() => _filter = v.trim()),
style: theme.textTheme.bodySmall,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 4,
),
prefixIcon: const Icon(Icons.search, size: 14),
prefixIconConstraints: const BoxConstraints(
minWidth: 28,
minHeight: 28,
),
hintText: strings.listFilterHint,
hintStyle: theme.textTheme.bodySmall?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(FaiRadius.sm),
borderSide: BorderSide(
color: theme.colorScheme.outlineVariant,
),
),
),
),
),
),
Expanded(child: _buildBody(context, theme)),
],
),
@ -1496,9 +1482,7 @@ class _FileListState extends State<_FileList> {
final needle = _filter.toLowerCase();
final files = needle.isEmpty
? all
: all
.where((f) => f.name.toLowerCase().contains(needle))
.toList();
: all.where((f) => f.name.toLowerCase().contains(needle)).toList();
if (files.isEmpty) {
// Flows exist, the filter just matches none say that
// instead of pretending the directory is empty.
@ -1601,7 +1585,7 @@ class _FileListState extends State<_FileList> {
onInstall: widget.onInstallMissing == null
? null
: () =>
widget.onInstallMissing!(missing),
widget.onInstallMissing!(missing),
),
],
),
@ -2027,8 +2011,10 @@ class _DiagnosticStripState extends State<_DiagnosticStrip> {
InkWell(
onTap: () => setState(() => _expanded = !_expanded),
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
child: Row(
children: [
Container(
@ -2222,16 +2208,10 @@ class _IssueRow extends StatelessWidget {
child: CircularProgressIndicator(strokeWidth: 2),
)
: const Icon(Icons.auto_fix_high, size: 13),
label: Text(
fix.label,
style: _monoTextStyle(size: 11),
),
label: Text(fix.label, style: _monoTextStyle(size: 11)),
style: FilledButton.styleFrom(
visualDensity: VisualDensity.compact,
padding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 4,
),
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
minimumSize: const Size(0, 24),
),
),
@ -2280,7 +2260,10 @@ class _IssueHoverCard extends StatelessWidget {
// to viewport so the card never spills off-screen on a
// narrow window.
const cardWidth = 380.0;
final maxLeft = (media.size.width - cardWidth - 12).clamp(8.0, double.infinity);
final maxLeft = (media.size.width - cardWidth - 12).clamp(
8.0,
double.infinity,
);
final dx = (request.globalPosition.dx + 12).clamp(8.0, maxLeft);
final dy = (request.globalPosition.dy + 18).clamp(
8.0,
@ -2300,9 +2283,7 @@ class _IssueHoverCard extends StatelessWidget {
decoration: BoxDecoration(
color: theme.colorScheme.surfaceContainerHigh,
borderRadius: BorderRadius.circular(8),
border: Border.all(
color: theme.colorScheme.outlineVariant,
),
border: Border.all(color: theme.colorScheme.outlineVariant),
boxShadow: const [
BoxShadow(
color: Color(0x33000000),
@ -2453,11 +2434,7 @@ class _FixDialogState extends State<_FixDialog> {
return AlertDialog(
title: Row(
children: [
Icon(
Icons.auto_fix_high,
size: 20,
color: theme.colorScheme.primary,
),
Icon(Icons.auto_fix_high, size: 20, color: theme.colorScheme.primary),
const SizedBox(width: 8),
Text(strings.diagnosticFixDialogTitle),
],
@ -2579,10 +2556,7 @@ class _FixDialogRow extends StatelessWidget {
FilledButton.tonalIcon(
onPressed: () => onApplyFix(fix),
icon: const Icon(Icons.auto_fix_high, size: 13),
label: Text(
fix.label,
style: _monoTextStyle(size: 11),
),
label: Text(fix.label, style: _monoTextStyle(size: 11)),
),
],
),