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
+5 -5
View File
@@ -23,11 +23,11 @@ enum KeyModifier {
/// Display string used in palette + tooltip hints.
String get display => switch (this) {
KeyModifier.ctrl => 'Ctrl',
KeyModifier.alt => 'Alt',
KeyModifier.shift => 'Shift',
KeyModifier.meta => 'Cmd',
};
KeyModifier.ctrl => 'Ctrl',
KeyModifier.alt => 'Alt',
KeyModifier.shift => 'Shift',
KeyModifier.meta => 'Cmd',
};
}
/// A modifier-set + a single key, identified by layout-independent
+2 -8
View File
@@ -23,11 +23,7 @@ import 'when_clause.dart';
/// to fire when the sequence matches and the when-clause is true.
@immutable
class KeymapBinding {
const KeymapBinding({
required this.sequence,
required this.intent,
this.when,
});
const KeymapBinding({required this.sequence, required this.intent, this.when});
/// Convenience constructor for a single-chord binding.
KeymapBinding.chord(KeyChord chord, {required this.intent, this.when}) : sequence = [chord];
@@ -204,9 +200,7 @@ class Keymap {
/// must come first. We don't dedupe — a no-op match in a later layer
/// just earns the first slot.
static List<KeymapBinding> _flatten(List<KeymapLayer> layers) {
return [
for (final l in layers.reversed) ...l.bindings,
];
return [for (final l in layers.reversed) ...l.bindings];
}
@override
+6 -18
View File
@@ -41,13 +41,10 @@ const String kKeymapOverridesSetting = 'app.keymap.overrides';
const String kKeymapUserFile = 'keybindings.yaml';
class KeymapService extends ChangeNotifier {
KeymapService({
required SettingsStore settings,
required Directory appDir,
AssetBundle? bundle,
}) : _settings = settings,
_appDir = appDir,
_bundle = bundle ?? rootBundle;
KeymapService({required SettingsStore settings, required Directory appDir, AssetBundle? bundle})
: _settings = settings,
_appDir = appDir,
_bundle = bundle ?? rootBundle;
final SettingsStore _settings;
final Directory _appDir;
@@ -127,11 +124,7 @@ class KeymapService extends ChangeNotifier {
/// defaults, the user can override either via the user file or
/// settings overlay.
void registerCommandBinding(String chordSpec, String commandId, {String? when}) {
_contributions.add(KeymapBinding(
sequence: KeyChord.parseSequence(chordSpec),
intent: InvokeCommandIntent(commandId),
when: WhenExpr.tryParse(when),
));
_contributions.add(KeymapBinding(sequence: KeyChord.parseSequence(chordSpec), intent: InvokeCommandIntent(commandId), when: WhenExpr.tryParse(when)));
_rebuildActive();
}
@@ -149,12 +142,7 @@ class KeymapService extends ChangeNotifier {
}
void _rebuildActive() {
final layers = <KeymapLayer>[
if (_preset != null) _preset!,
KeymapLayer(name: 'contributions', bindings: List.unmodifiable(_contributions)),
if (_userFile != null) _userFile!,
if (_settingsOverlay != null) _settingsOverlay!,
];
final layers = <KeymapLayer>[?_preset, KeymapLayer(name: 'contributions', bindings: List.unmodifiable(_contributions)), ?_userFile, ?_settingsOverlay];
_active = Keymap(layers);
notifyListeners();
}
+6 -18
View File
@@ -33,18 +33,9 @@ enum SeqOutcome {
@immutable
class SeqResult {
const SeqResult.fired(Intent this.intent, this.count)
: outcome = SeqOutcome.fired,
passKey = null;
const SeqResult.pending()
: outcome = SeqOutcome.pending,
intent = null,
count = 1,
passKey = null;
const SeqResult.unmatched(this.passKey)
: outcome = SeqOutcome.unmatched,
intent = null,
count = 1;
const SeqResult.fired(Intent this.intent, this.count) : outcome = SeqOutcome.fired, passKey = null;
const SeqResult.pending() : outcome = SeqOutcome.pending, intent = null, count = 1, passKey = null;
const SeqResult.unmatched(this.passKey) : outcome = SeqOutcome.unmatched, intent = null, count = 1;
final SeqOutcome outcome;
final Intent? intent;
@@ -53,12 +44,9 @@ class SeqResult {
}
class SequenceMatcher {
SequenceMatcher({
required Keymap Function() keymap,
required Map<String, bool> Function() context,
this.captureCounts = true,
}) : _keymap = keymap,
_context = context;
SequenceMatcher({required Keymap Function() keymap, required Map<String, bool> Function() context, this.captureCounts = true})
: _keymap = keymap,
_context = context;
final Keymap Function() _keymap;
final Map<String, bool> Function() _context;