Nate Wilson 788a0e3d2f
Implementing null-aware logic in /packages/flutter/ (#152294)
Hopefully soon, [flutter.dev/go/dart-patterns](https://flutter.dev/go/dart-patterns) will have lots of good feedback; in the meantime, I'll focus refactoring efforts on uncontroversial things :)

Previously, I was under the impression that I could solve issue #143803 with [just 1 PR](https://github.com/flutter/flutter/pull/143804).
It turns out that I had overlooked quite a bit!

<br>

```dart
// before
if (chunkEvents != null) {
  chunkEvents.listen((ImageChunkEvent event) {
      reportImageChunkEvent(event);
    },
  );
}

// after
chunkEvents?.listen(reportImageChunkEvent);
```
2024-07-31 23:35:24 +00:00

56 lines
1.5 KiB
Dart

// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:ui' as ui;
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter_test/flutter_test.dart';
typedef HandleEventCallback = void Function(PointerEvent event);
class TestGestureFlutterBinding extends BindingBase with GestureBinding {
HandleEventCallback? callback;
@override
void handleEvent(PointerEvent event, HitTestEntry entry) {
callback?.call(event);
super.handleEvent(event, entry);
}
static const ui.PointerDataPacket packet = ui.PointerDataPacket(
data: <ui.PointerData>[
ui.PointerData(change: ui.PointerChange.down),
ui.PointerData(change: ui.PointerChange.up),
],
);
Future<void> test(VoidCallback callback) {
return _binding.lockEvents(() async {
GestureBinding.instance.platformDispatcher.onPointerDataPacket?.call(packet);
callback();
});
}
}
late TestGestureFlutterBinding _binding;
void main() {
_binding = TestGestureFlutterBinding();
test('Pointer events are locked during reassemble', () async {
final List<PointerEvent> events = <PointerEvent>[];
_binding.callback = events.add;
bool tested = false;
await _binding.test(() {
expect(events.length, 0);
tested = true;
});
expect(tested, isTrue);
expect(events.length, 2);
expect(events[0], isA<PointerDownEvent>());
expect(events[1], isA<PointerUpEvent>());
});
}