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:
2026-06-11 12:11:53 +02:00
co-authored by Claude Opus 4.8
parent bcea5f15b7
commit 6d0ebab721
444 changed files with 7587 additions and 12849 deletions
+16 -29
View File
@@ -16,21 +16,21 @@ import 'package:flutter_test/flutter_test.dart';
import 'helpers/kernel_fixture.dart';
Widget _bar(KernelFixture f, double width) => Directionality(
textDirection: TextDirection.ltr,
child: ClideKernel(
services: f.services,
child: ClideTheme(
controller: f.services.theme,
child: MediaQuery(
data: MediaQueryData(size: Size(width, 200)),
child: Align(
alignment: Alignment.topLeft,
child: SizedBox(width: width, height: 26, child: const StatusbarHost()),
),
),
textDirection: TextDirection.ltr,
child: ClideKernel(
services: f.services,
child: ClideTheme(
controller: f.services.theme,
child: MediaQuery(
data: MediaQueryData(size: Size(width, 200)),
child: Align(
alignment: Alignment.topLeft,
child: SizedBox(width: width, height: 26, child: const StatusbarHost()),
),
),
);
),
),
);
void main() {
late KernelFixture f;
@@ -53,17 +53,8 @@ void main() {
testWidgets('right group hugs the bar right edge at normal AND ultrawide widths (T-239)', (tester) async {
// Mirrors the real surface: a left flex:1 item (like the Claude status
// marquee, priority 50) + a right-group item (priority >= 100).
f.services.panels.contribute(StatusItemContribution(
id: 'test.left.flex',
priority: 50,
flex: 1,
build: (_) => const Text('LEFT', softWrap: false),
));
f.services.panels.contribute(StatusItemContribution(
id: 'test.right',
priority: 110,
build: (_) => const Text('RIGHT', softWrap: false),
));
f.services.panels.contribute(StatusItemContribution(id: 'test.left.flex', priority: 50, flex: 1, build: (_) => const Text('LEFT', softWrap: false)));
f.services.panels.contribute(StatusItemContribution(id: 'test.right', priority: 110, build: (_) => const Text('RIGHT', softWrap: false)));
// 600 = normal, 3440 = ultrawide (where the float actually surfaced).
for (final width in [600.0, 3440.0]) {
@@ -77,11 +68,7 @@ void main() {
});
testWidgets('right group hugs the edge with no left items (ultrawide)', (tester) async {
f.services.panels.contribute(StatusItemContribution(
id: 'test.right.only',
priority: 110,
build: (_) => const Text('R2', softWrap: false),
));
f.services.panels.contribute(StatusItemContribution(id: 'test.right.only', priority: 110, build: (_) => const Text('R2', softWrap: false)));
await pumpAt(tester, 3440.0);
expect(tester.takeException(), isNull);
expect(tester.getTopRight(find.text('R2')).dx, closeTo(3440 - 8, 1.0));