chore: adopt Dart 3.9 toolchain — honest floor + tall-style reformat (T-353)
Raise the declared minimums in pubspec.yaml to what our deps already require: Flutter >=3.35.0 / Dart >=3.9.0 (was 3.19.0 / 3.5.0). alchemist 0.12 needs Flutter 3.32; Dart 3.9 first ships in Flutter 3.35, so 3.35 is the binding floor. Pin the exact build toolchain in .fvmrc (Flutter 3.44.1). Moving to the Dart 3.9 language level switches `dart format` to the new "tall" style and enables two new lints. This commit is the resulting mechanical churn, isolated from any behaviour change: - whole-tree `dart format` reformat (tall style) - `dart fix` for unnecessary_underscores + use_null_aware_elements No runtime behaviour change; `make test` green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -60,8 +60,8 @@ class _DockStatusItemState extends State<DockStatusItem> {
|
||||
final (String badge, Color color) = errors > 0
|
||||
? ('✕ $errors', tokens.statusError)
|
||||
: warns > 0
|
||||
? ('⚠ $warns', tokens.statusWarning)
|
||||
: ('✓', tokens.statusSuccess);
|
||||
? ('⚠ $warns', tokens.statusWarning)
|
||||
: ('✓', tokens.statusSuccess);
|
||||
return Semantics(
|
||||
button: true,
|
||||
label: 'toggle output dock',
|
||||
|
||||
@@ -30,34 +30,34 @@ class OutputExtension extends ClideExtension {
|
||||
|
||||
@override
|
||||
List<ContributionPoint> get contributions => [
|
||||
TabContribution(
|
||||
id: 'output.panel',
|
||||
slot: Slots.dock,
|
||||
title: 'Output',
|
||||
priority: -100, // sort before Problems in the dock tab bar
|
||||
build: (ctx) => OutputView(ring: ClideKernel.of(ctx).logRing),
|
||||
),
|
||||
StatusItemContribution(
|
||||
id: 'output.dock-toggle',
|
||||
priority: 100, // right group, replacing the old app-status item
|
||||
build: (_) => const DockStatusItem(),
|
||||
),
|
||||
CommandContribution(
|
||||
id: 'dock.toggle',
|
||||
command: 'dock.toggle',
|
||||
title: 'Toggle output dock',
|
||||
defaultBinding: 'ctrl+j',
|
||||
run: (_) async {
|
||||
final ctx = _ctx;
|
||||
if (ctx == null) return IpcResponse.ok(id: '', data: const {});
|
||||
final a = ctx.arrangement;
|
||||
final opening = !a.isVisible(Slots.dock);
|
||||
a.setVisible(Slots.dock, opening);
|
||||
if (opening && ctx.panels.activeTabIn(Slots.dock) == null) {
|
||||
ctx.panels.activateTab(Slots.dock, 'output.panel');
|
||||
}
|
||||
return IpcResponse.ok(id: '', data: {'dock': opening});
|
||||
},
|
||||
),
|
||||
];
|
||||
TabContribution(
|
||||
id: 'output.panel',
|
||||
slot: Slots.dock,
|
||||
title: 'Output',
|
||||
priority: -100, // sort before Problems in the dock tab bar
|
||||
build: (ctx) => OutputView(ring: ClideKernel.of(ctx).logRing),
|
||||
),
|
||||
StatusItemContribution(
|
||||
id: 'output.dock-toggle',
|
||||
priority: 100, // right group, replacing the old app-status item
|
||||
build: (_) => const DockStatusItem(),
|
||||
),
|
||||
CommandContribution(
|
||||
id: 'dock.toggle',
|
||||
command: 'dock.toggle',
|
||||
title: 'Toggle output dock',
|
||||
defaultBinding: 'ctrl+j',
|
||||
run: (_) async {
|
||||
final ctx = _ctx;
|
||||
if (ctx == null) return IpcResponse.ok(id: '', data: const {});
|
||||
final a = ctx.arrangement;
|
||||
final opening = !a.isVisible(Slots.dock);
|
||||
a.setVisible(Slots.dock, opening);
|
||||
if (opening && ctx.panels.activeTabIn(Slots.dock) == null) {
|
||||
ctx.panels.activateTab(Slots.dock, 'output.panel');
|
||||
}
|
||||
return IpcResponse.ok(id: '', data: {'dock': opening});
|
||||
},
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -84,10 +84,7 @@ class _OutputViewState extends State<OutputView> {
|
||||
child: rows.isEmpty
|
||||
? Padding(
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: ClideText(
|
||||
widget.ring.isEmpty ? 'No output yet.' : 'No output matches the filter.',
|
||||
muted: true,
|
||||
),
|
||||
child: ClideText(widget.ring.isEmpty ? 'No output yet.' : 'No output matches the filter.', muted: true),
|
||||
)
|
||||
: Stack(
|
||||
children: [
|
||||
@@ -100,12 +97,7 @@ class _OutputViewState extends State<OutputView> {
|
||||
children: [for (final r in rows) _LogRow(record: r)],
|
||||
),
|
||||
),
|
||||
if (!_following)
|
||||
Positioned(
|
||||
right: 12,
|
||||
bottom: 8,
|
||||
child: _JumpPill(onTap: _jumpToLatest),
|
||||
),
|
||||
if (!_following) Positioned(right: 12, bottom: 8, child: _JumpPill(onTap: _jumpToLatest)),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -128,15 +120,9 @@ class _OutputViewState extends State<OutputView> {
|
||||
child: ClideFilterBox(address: 'output.panel', hint: 'Filter…', onChanged: _c.setText),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
_Chip(
|
||||
label: 'Level: ${_c.minLevel.name}',
|
||||
onTap: () => _c.setMinLevel(LogLevel.values[(_c.minLevel.index + 1) % LogLevel.values.length]),
|
||||
),
|
||||
_Chip(label: 'Level: ${_c.minLevel.name}', onTap: () => _c.setMinLevel(LogLevel.values[(_c.minLevel.index + 1) % LogLevel.values.length])),
|
||||
const SizedBox(width: 6),
|
||||
_Chip(
|
||||
label: 'Source: ${_c.source ?? 'all'}',
|
||||
onTap: _cycleSource,
|
||||
),
|
||||
_Chip(label: 'Source: ${_c.source ?? 'all'}', onTap: _cycleSource),
|
||||
const SizedBox(width: 6),
|
||||
_Chip(label: 'Clear', onTap: _c.clear),
|
||||
],
|
||||
@@ -235,8 +221,14 @@ class _LogRow extends StatelessWidget {
|
||||
const SizedBox(width: 8),
|
||||
SizedBox(
|
||||
width: 92,
|
||||
child: ClideText(record.source,
|
||||
fontSize: clideFontMono, color: tokens.globalTextMuted, fontFamily: clideMonoFamily, maxLines: 1, overflow: TextOverflow.clip),
|
||||
child: ClideText(
|
||||
record.source,
|
||||
fontSize: clideFontMono,
|
||||
color: tokens.globalTextMuted,
|
||||
fontFamily: clideMonoFamily,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.clip,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
@@ -248,9 +240,9 @@ class _LogRow extends StatelessWidget {
|
||||
}
|
||||
|
||||
Color _levelColor(LogLevel level, SurfaceTokens tokens) => switch (level) {
|
||||
LogLevel.error => tokens.statusError,
|
||||
LogLevel.warn => tokens.statusWarning,
|
||||
LogLevel.info => tokens.globalForeground,
|
||||
LogLevel.debug || LogLevel.trace => tokens.globalTextMuted,
|
||||
};
|
||||
LogLevel.error => tokens.statusError,
|
||||
LogLevel.warn => tokens.statusWarning,
|
||||
LogLevel.info => tokens.globalForeground,
|
||||
LogLevel.debug || LogLevel.trace => tokens.globalTextMuted,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user