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:
@@ -23,16 +23,14 @@ void main() {
|
||||
var tapped = 0;
|
||||
final node = FocusNode();
|
||||
addTearDown(node.dispose);
|
||||
await tester.pumpWidget(harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(
|
||||
focusNode: node,
|
||||
onTap: () => tapped++,
|
||||
builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24),
|
||||
await tester.pumpWidget(
|
||||
harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(focusNode: node, onTap: () => tapped++, builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24)),
|
||||
),
|
||||
),
|
||||
));
|
||||
);
|
||||
|
||||
expect(node.hasFocus, isFalse);
|
||||
node.requestFocus();
|
||||
@@ -46,17 +44,19 @@ void main() {
|
||||
var tapped = 0;
|
||||
final node = FocusNode();
|
||||
addTearDown(node.dispose);
|
||||
await tester.pumpWidget(harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(
|
||||
focusNode: node,
|
||||
autofocus: true,
|
||||
onTap: () => tapped++,
|
||||
builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24),
|
||||
await tester.pumpWidget(
|
||||
harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(
|
||||
focusNode: node,
|
||||
autofocus: true,
|
||||
onTap: () => tapped++,
|
||||
builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24),
|
||||
),
|
||||
),
|
||||
),
|
||||
));
|
||||
);
|
||||
await tester.pump();
|
||||
expect(node.hasFocus, isTrue);
|
||||
// Dispatch ActivateIntent directly against the focused context
|
||||
@@ -70,16 +70,14 @@ void main() {
|
||||
testWidgets('disabled tappable (onTap == null) cannot receive focus', (tester) async {
|
||||
final node = FocusNode();
|
||||
addTearDown(node.dispose);
|
||||
await tester.pumpWidget(harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(
|
||||
focusNode: node,
|
||||
onTap: null,
|
||||
builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24),
|
||||
await tester.pumpWidget(
|
||||
harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(focusNode: node, onTap: null, builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24)),
|
||||
),
|
||||
),
|
||||
));
|
||||
);
|
||||
node.requestFocus();
|
||||
await tester.pump();
|
||||
expect(node.hasFocus, isFalse, reason: 'canRequestFocus is false when onTap is null');
|
||||
@@ -88,16 +86,14 @@ void main() {
|
||||
testWidgets('focus ring appears when focused, gone when unfocused', (tester) async {
|
||||
final node = FocusNode();
|
||||
addTearDown(node.dispose);
|
||||
await tester.pumpWidget(harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(
|
||||
focusNode: node,
|
||||
onTap: () {},
|
||||
builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24),
|
||||
await tester.pumpWidget(
|
||||
harness(
|
||||
f,
|
||||
Center(
|
||||
child: ClideTappable(focusNode: node, onTap: () {}, builder: (_, hovered, pressed) => const SizedBox(width: 60, height: 24)),
|
||||
),
|
||||
),
|
||||
));
|
||||
);
|
||||
|
||||
Iterable<Color> ringColors() => tester
|
||||
.widgetList<DecoratedBox>(find.descendant(of: find.byType(ClideTappable), matching: find.byType(DecoratedBox)))
|
||||
|
||||
Reference in New Issue
Block a user