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
+52 -36
View File
@@ -59,17 +59,19 @@ void main() {
testWidgets('renders items + separator; tapping an item fires onSelect + onClose', (tester) async {
var picked = '';
var closed = 0;
await tester.pumpWidget(harness(
f,
ClideMenu(
onClose: () => closed++,
entries: [
ClideMenuItem(label: 'Alpha', onSelect: () => picked = 'Alpha'),
const ClideMenuSeparator(),
ClideMenuItem(label: 'Beta', onSelect: () => picked = 'Beta'),
],
await tester.pumpWidget(
harness(
f,
ClideMenu(
onClose: () => closed++,
entries: [
ClideMenuItem(label: 'Alpha', onSelect: () => picked = 'Alpha'),
const ClideMenuSeparator(),
ClideMenuItem(label: 'Beta', onSelect: () => picked = 'Beta'),
],
),
),
));
);
await tester.pump();
expect(find.text('Alpha'), findsOneWidget);
expect(find.text('Beta'), findsOneWidget);
@@ -81,16 +83,18 @@ void main() {
testWidgets('arrow-down then Enter activates the highlighted item', (tester) async {
var picked = '';
await tester.pumpWidget(harness(
f,
ClideMenu(
onClose: () {},
entries: [
ClideMenuItem(label: 'One', onSelect: () => picked = 'One'),
ClideMenuItem(label: 'Two', onSelect: () => picked = 'Two'),
],
await tester.pumpWidget(
harness(
f,
ClideMenu(
onClose: () {},
entries: [
ClideMenuItem(label: 'One', onSelect: () => picked = 'One'),
ClideMenuItem(label: 'Two', onSelect: () => picked = 'Two'),
],
),
),
));
);
await tester.pump();
await tester.sendKeyEvent(LogicalKeyboardKey.arrowDown);
await tester.sendKeyEvent(LogicalKeyboardKey.arrowDown);
@@ -101,17 +105,19 @@ void main() {
testWidgets('disabled item is inert and skipped by arrows', (tester) async {
var picked = '';
await tester.pumpWidget(harness(
f,
ClideMenu(
onClose: () {},
entries: [
ClideMenuItem(label: 'Able', onSelect: () => picked = 'Able'),
ClideMenuItem(label: 'Off', enabled: false, onSelect: () => picked = 'Off'),
ClideMenuItem(label: 'Last', onSelect: () => picked = 'Last'),
],
await tester.pumpWidget(
harness(
f,
ClideMenu(
onClose: () {},
entries: [
ClideMenuItem(label: 'Able', onSelect: () => picked = 'Able'),
ClideMenuItem(label: 'Off', enabled: false, onSelect: () => picked = 'Off'),
ClideMenuItem(label: 'Last', onSelect: () => picked = 'Last'),
],
),
),
));
);
await tester.pump();
await tester.tap(find.text('Off'));
await tester.pump();
@@ -125,7 +131,15 @@ void main() {
testWidgets('Escape calls onClose', (tester) async {
var closed = 0;
await tester.pumpWidget(harness(f, ClideMenu(onClose: () => closed++, entries: [ClideMenuItem(label: 'X', onSelect: () {})])));
await tester.pumpWidget(
harness(
f,
ClideMenu(
onClose: () => closed++,
entries: [ClideMenuItem(label: 'X', onSelect: () {})],
),
),
);
await tester.pump();
await tester.sendKeyEvent(LogicalKeyboardKey.escape);
await tester.pump();
@@ -135,13 +149,15 @@ void main() {
testWidgets('keepOpenOnSelect item fires onSelect but not onClose', (tester) async {
var picked = 0;
var closed = 0;
await tester.pumpWidget(harness(
f,
ClideMenu(
onClose: () => closed++,
entries: [ClideMenuItem(label: 'Toggle', keepOpenOnSelect: true, onSelect: () => picked++)],
await tester.pumpWidget(
harness(
f,
ClideMenu(
onClose: () => closed++,
entries: [ClideMenuItem(label: 'Toggle', keepOpenOnSelect: true, onSelect: () => picked++)],
),
),
));
);
await tester.pump();
await tester.tap(find.text('Toggle'));
await tester.pump();