Skip to content

Commit f3be9f1

Browse files
authored
Incorporate compat info changes into flutter engine (flutter#19606)
Changes related to compatibility info require changes in Flutter engine libraries. This CL adds null-asserts wherever necessary to maintain behavior and adds some small modifications to handle the change in nullability. Warnings about unnecessary null assertions are disabled temporarily in this CL as well. Original issue: dart-lang/sdk#41905
1 parent 7e101f1 commit f3be9f1

17 files changed

+82
-80
lines changed

lib/web_ui/analysis_options.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ analyzer:
1212
missing_required_param: warning
1313
missing_return: warning
1414
native_function_body_in_non_sdk_code: ignore
15+
unnecessary_non_null_assertion: ignore
16+
unnecessary_null_comparison: ignore
1517
todo: ignore
1618

1719
linter:

lib/web_ui/lib/src/engine/assets.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class AssetManager {
6464
.warn('Asset manifest does not exist at `$url` – ignoring.');
6565
return Uint8List.fromList(utf8.encode('{}')).buffer.asByteData();
6666
}
67-
throw AssetManagerException(url, target.status);
67+
throw AssetManagerException(url, target.status!);
6868
}
6969

7070
html.window.console.warn('Caught ProgressEvent with target: $target');

lib/web_ui/lib/src/engine/bitmap_canvas.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ class BitmapCanvas extends EngineCanvas {
364364
}
365365

366366
html.ImageElement _reuseOrCreateImage(HtmlImage htmlImage) {
367-
final String cacheKey = htmlImage.imgElement.src;
367+
final String cacheKey = htmlImage.imgElement.src!;
368368
if (_elementCache != null) {
369369
html.ImageElement? imageElement = _elementCache!.reuse(cacheKey) as html.ImageElement?;
370370
if (imageElement != null) {
@@ -674,7 +674,7 @@ class BitmapCanvas extends EngineCanvas {
674674
for (int i = 0; i < len; i++) {
675675
final String char = line.displayText![i];
676676
ctx!.fillText(char, x, y);
677-
x += letterSpacing + ctx.measureText(char).width;
677+
x += letterSpacing + ctx.measureText(char).width!;
678678
}
679679
}
680680
}

lib/web_ui/lib/src/engine/browser_detection.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ OperatingSystem get operatingSystem {
115115
OperatingSystem? debugOperatingSystemOverride;
116116

117117
OperatingSystem _detectOperatingSystem() {
118-
final String platform = html.window.navigator.platform;
118+
final String platform = html.window.navigator.platform!;
119119
final String userAgent = html.window.navigator.userAgent;
120120

121121
if (platform.startsWith('Mac')) {

lib/web_ui/lib/src/engine/browser_location.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,10 @@ class BrowserPlatformLocation extends PlatformLocation {
176176
}
177177

178178
@override
179-
String get pathname => _location.pathname;
179+
String get pathname => _location.pathname!;
180180

181181
@override
182-
String get search => _location.search;
182+
String get search => _location.search!;
183183

184184
@override
185185
String get hash => _location.hash;

lib/web_ui/lib/src/engine/clipboard.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class ClipboardAPICopyStrategy implements CopyToClipboardStrategy {
109109
@override
110110
Future<bool> setData(String? text) async {
111111
try {
112-
await html.window.navigator.clipboard.writeText(text!);
112+
await html.window.navigator.clipboard!.writeText(text!);
113113
} catch (error) {
114114
print('copy is not successful $error');
115115
return Future.value(false);
@@ -127,7 +127,7 @@ class ClipboardAPICopyStrategy implements CopyToClipboardStrategy {
127127
class ClipboardAPIPasteStrategy implements PasteFromClipboardStrategy {
128128
@override
129129
Future<String> getData() async {
130-
return html.window.navigator.clipboard.readText();
130+
return html.window.navigator.clipboard!.readText();
131131
}
132132
}
133133

lib/web_ui/lib/src/engine/dom_renderer.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ flt-glass-pane * {
420420
// Firefox returns correct values for innerHeight, innerWidth.
421421
// Firefox also triggers html.window.onResize therefore we don't need this
422422
// timer setup for Firefox.
423-
final int initialInnerWidth = html.window.innerWidth;
423+
final int initialInnerWidth = html.window.innerWidth!;
424424
// Counts how many times we checked screen size. We check up to 5 times.
425425
int checkCount = 0;
426426
Timer.periodic(const Duration(milliseconds: 100), (Timer t) {
@@ -534,10 +534,10 @@ flt-glass-pane * {
534534
///
535535
/// See w3c screen api: https://www.w3.org/TR/screen-orientation/
536536
Future<bool> setPreferredOrientation(List<dynamic>? orientations) {
537-
final html.Screen screen = html.window.screen;
537+
final html.Screen screen = html.window.screen!;
538538
if (!_unsafeIsNull(screen)) {
539539
final html.ScreenOrientation screenOrientation =
540-
screen.orientation;
540+
screen.orientation!;
541541
if (!_unsafeIsNull(screenOrientation)) {
542542
if (orientations!.isEmpty) {
543543
screenOrientation.unlock();

lib/web_ui/lib/src/engine/keyboard.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class Keyboard {
8989
event.preventDefault();
9090
}
9191

92-
final String timerKey = keyboardEvent.code;
92+
final String timerKey = keyboardEvent.code!;
9393

9494
// Don't synthesize a keyup event for modifier keys because the browser always
9595
// sends a keyup event for those.
@@ -181,7 +181,7 @@ int _getMetaState(html.KeyboardEvent event) {
181181
/// Modifier keys are shift, alt, ctrl and meta/cmd/win. These are the keys used
182182
/// to perform keyboard shortcuts (e.g. `cmd+c`, `cmd+l`).
183183
bool _isModifierKey(html.KeyboardEvent event) {
184-
final String key = event.key;
184+
final String key = event.key!;
185185
return key == 'Meta' || key == 'Shift' || key == 'Alt' || key == 'Control';
186186
}
187187

lib/web_ui/lib/src/engine/pointer_binding.dart

+32-32
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,13 @@ mixin _WheelEventListenerMixin on _BaseAdapter {
257257
_pointerDataConverter.convert(
258258
data,
259259
change: ui.PointerChange.hover,
260-
timeStamp: _BaseAdapter._eventTimeStampToDuration(event.timeStamp),
260+
timeStamp: _BaseAdapter._eventTimeStampToDuration(event.timeStamp!),
261261
kind: ui.PointerDeviceKind.mouse,
262262
signalKind: ui.PointerSignalKind.scroll,
263263
device: _mouseDeviceId,
264264
physicalX: event.client.x * ui.window.devicePixelRatio as double,
265265
physicalY: event.client.y * ui.window.devicePixelRatio as double,
266-
buttons: event.buttons,
266+
buttons: event.buttons!,
267267
pressure: 1.0,
268268
pressureMin: 0.0,
269269
pressureMax: 1.0,
@@ -444,23 +444,23 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
444444
@override
445445
void setup() {
446446
_addPointerEventListener('pointerdown', (html.PointerEvent event) {
447-
final int device = event.pointerId;
447+
final int device = event.pointerId!;
448448
final List<ui.PointerData> pointerData = <ui.PointerData>[];
449449
final _SanitizedDetails details =
450450
_ensureSanitizer(device).sanitizeDownEvent(
451451
button: event.button,
452-
buttons: event.buttons,
452+
buttons: event.buttons!,
453453
);
454454
_convertEventsToPointerData(data: pointerData, event: event, details: details);
455455
_callback(pointerData);
456456
});
457457

458458
_addPointerEventListener('pointermove', (html.PointerEvent event) {
459-
final int device = event.pointerId;
459+
final int device = event.pointerId!;
460460
final _ButtonSanitizer sanitizer = _ensureSanitizer(device);
461461
final List<ui.PointerData> pointerData = <ui.PointerData>[];
462462
final Iterable<_SanitizedDetails> detailsList = _expandEvents(event).map(
463-
(html.PointerEvent expandedEvent) => sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons),
463+
(html.PointerEvent expandedEvent) => sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!),
464464
);
465465
for (_SanitizedDetails details in detailsList) {
466466
_convertEventsToPointerData(data: pointerData, event: event, details: details);
@@ -469,7 +469,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
469469
}, acceptOutsideGlasspane: true);
470470

471471
_addPointerEventListener('pointerup', (html.PointerEvent event) {
472-
final int device = event.pointerId;
472+
final int device = event.pointerId!;
473473
final List<ui.PointerData> pointerData = <ui.PointerData>[];
474474
final _SanitizedDetails? details = _getSanitizer(device).sanitizeUpEvent();
475475
_removePointerIfUnhoverable(event);
@@ -482,7 +482,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
482482
// A browser fires cancel event if it concludes the pointer will no longer
483483
// be able to generate events (example: device is deactivated)
484484
_addPointerEventListener('pointercancel', (html.PointerEvent event) {
485-
final int device = event.pointerId;
485+
final int device = event.pointerId!;
486486
final List<ui.PointerData> pointerData = <ui.PointerData>[];
487487
final _SanitizedDetails details = _getSanitizer(device).sanitizeCancelEvent();
488488
_removePointerIfUnhoverable(event);
@@ -512,13 +512,13 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
512512
assert(data != null); // ignore: unnecessary_null_comparison
513513
assert(event != null); // ignore: unnecessary_null_comparison
514514
assert(details != null); // ignore: unnecessary_null_comparison
515-
final ui.PointerDeviceKind kind = _pointerTypeToDeviceKind(event.pointerType);
515+
final ui.PointerDeviceKind kind = _pointerTypeToDeviceKind(event.pointerType!);
516516
// We force `device: _mouseDeviceId` on mouse pointers because Wheel events
517517
// might come before any PointerEvents, and since wheel events don't contain
518518
// pointerId we always assign `device: _mouseDeviceId` to them.
519-
final int device = kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId;
519+
final int device = kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId!;
520520
final double tilt = _computeHighestTilt(event);
521-
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp);
521+
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!);
522522
_pointerDataConverter.convert(
523523
data,
524524
change: details.change,
@@ -566,7 +566,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
566566

567567
/// Tilt angle is -90 to + 90. Take maximum deflection and convert to radians.
568568
double _computeHighestTilt(html.PointerEvent e) =>
569-
(e.tiltX.abs() > e.tiltY.abs() ? e.tiltX : e.tiltY).toDouble() /
569+
(e.tiltX!.abs() > e.tiltY!.abs() ? e.tiltX : e.tiltY)!.toDouble() /
570570
180.0 *
571571
math.pi;
572572
}
@@ -596,12 +596,12 @@ class _TouchAdapter extends _BaseAdapter {
596596
@override
597597
void setup() {
598598
_addTouchEventListener('touchstart', (html.TouchEvent event) {
599-
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp);
599+
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!);
600600
final List<ui.PointerData> pointerData = <ui.PointerData>[];
601-
for (html.Touch touch in event.changedTouches) {
602-
final nowPressed = _isTouchPressed(touch.identifier);
601+
for (html.Touch touch in event.changedTouches!) {
602+
final nowPressed = _isTouchPressed(touch.identifier!);
603603
if (!nowPressed) {
604-
_pressTouch(touch.identifier);
604+
_pressTouch(touch.identifier!);
605605
_convertEventToPointerData(
606606
data: pointerData,
607607
change: ui.PointerChange.down,
@@ -616,10 +616,10 @@ class _TouchAdapter extends _BaseAdapter {
616616

617617
_addTouchEventListener('touchmove', (html.TouchEvent event) {
618618
event.preventDefault(); // Prevents standard overscroll on iOS/Webkit.
619-
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp);
619+
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!);
620620
final List<ui.PointerData> pointerData = <ui.PointerData>[];
621-
for (html.Touch touch in event.changedTouches) {
622-
final nowPressed = _isTouchPressed(touch.identifier);
621+
for (html.Touch touch in event.changedTouches!) {
622+
final nowPressed = _isTouchPressed(touch.identifier!);
623623
if (nowPressed) {
624624
_convertEventToPointerData(
625625
data: pointerData,
@@ -637,12 +637,12 @@ class _TouchAdapter extends _BaseAdapter {
637637
// On Safari Mobile, the keyboard does not show unless this line is
638638
// added.
639639
event.preventDefault();
640-
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp);
640+
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!);
641641
final List<ui.PointerData> pointerData = <ui.PointerData>[];
642-
for (html.Touch touch in event.changedTouches) {
643-
final nowPressed = _isTouchPressed(touch.identifier);
642+
for (html.Touch touch in event.changedTouches!) {
643+
final nowPressed = _isTouchPressed(touch.identifier!);
644644
if (nowPressed) {
645-
_unpressTouch(touch.identifier);
645+
_unpressTouch(touch.identifier!);
646646
_convertEventToPointerData(
647647
data: pointerData,
648648
change: ui.PointerChange.up,
@@ -656,12 +656,12 @@ class _TouchAdapter extends _BaseAdapter {
656656
});
657657

658658
_addTouchEventListener('touchcancel', (html.TouchEvent event) {
659-
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp);
659+
final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!);
660660
final List<ui.PointerData> pointerData = <ui.PointerData>[];
661-
for (html.Touch touch in event.changedTouches) {
662-
final nowPressed = _isTouchPressed(touch.identifier);
661+
for (html.Touch touch in event.changedTouches!) {
662+
final nowPressed = _isTouchPressed(touch.identifier!);
663663
if (nowPressed) {
664-
_unpressTouch(touch.identifier);
664+
_unpressTouch(touch.identifier!);
665665
_convertEventToPointerData(
666666
data: pointerData,
667667
change: ui.PointerChange.cancel,
@@ -688,7 +688,7 @@ class _TouchAdapter extends _BaseAdapter {
688688
timeStamp: timeStamp,
689689
kind: ui.PointerDeviceKind.touch,
690690
signalKind: ui.PointerSignalKind.none,
691-
device: touch.identifier,
691+
device: touch.identifier!,
692692
physicalX: touch.client.x * ui.window.devicePixelRatio as double,
693693
physicalY: touch.client.y * ui.window.devicePixelRatio as double,
694694
buttons: pressed ? _kPrimaryMouseButton : 0,
@@ -746,15 +746,15 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
746746
final _SanitizedDetails sanitizedDetails =
747747
_sanitizer.sanitizeDownEvent(
748748
button: event.button,
749-
buttons: event.buttons,
749+
buttons: event.buttons!,
750750
);
751751
_convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails);
752752
_callback(pointerData);
753753
});
754754

755755
_addMouseEventListener('mousemove', (html.MouseEvent event) {
756756
final List<ui.PointerData> pointerData = <ui.PointerData>[];
757-
final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeMoveEvent(buttons: event.buttons);
757+
final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeMoveEvent(buttons: event.buttons!);
758758
_convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails);
759759
_callback(pointerData);
760760
}, acceptOutsideGlasspane: true);
@@ -764,7 +764,7 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
764764
final bool isEndOfDrag = event.buttons == 0;
765765
final _SanitizedDetails sanitizedDetails = isEndOfDrag ?
766766
_sanitizer.sanitizeUpEvent()! :
767-
_sanitizer.sanitizeMoveEvent(buttons: event.buttons);
767+
_sanitizer.sanitizeMoveEvent(buttons: event.buttons!);
768768
_convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails);
769769
_callback(pointerData);
770770
}, acceptOutsideGlasspane: true);
@@ -794,7 +794,7 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
794794
_pointerDataConverter.convert(
795795
data,
796796
change: details.change,
797-
timeStamp: _BaseAdapter._eventTimeStampToDuration(event.timeStamp),
797+
timeStamp: _BaseAdapter._eventTimeStampToDuration(event.timeStamp!),
798798
kind: ui.PointerDeviceKind.mouse,
799799
signalKind: ui.PointerSignalKind.none,
800800
device: _mouseDeviceId,

lib/web_ui/lib/src/engine/semantics/incrementable.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ class Incrementable extends RoleManager {
4545
_element.setAttribute('role', 'slider');
4646

4747
_element.addEventListener('change', (_) {
48-
if (_element.disabled) {
48+
if (_element.disabled!) {
4949
return;
5050
}
5151
_pendingResync = true;
52-
final int newInputValue = int.parse(_element.value);
52+
final int newInputValue = int.parse(_element.value!);
5353
if (newInputValue > _currentSurrogateValue) {
5454
_currentSurrogateValue += 1;
5555
window.invokeOnSemanticsAction(
@@ -84,7 +84,7 @@ class Incrementable extends RoleManager {
8484

8585
void _enableBrowserGestureHandling() {
8686
assert(semanticsObject.owner.gestureMode == GestureMode.browserGestures);
87-
if (!_element.disabled) {
87+
if (!_element.disabled!) {
8888
return;
8989
}
9090
_element.disabled = false;
@@ -123,7 +123,7 @@ class Incrementable extends RoleManager {
123123
}
124124

125125
void _disableBrowserGestureHandling() {
126-
if (_element.disabled) {
126+
if (_element.disabled!) {
127127
return;
128128
}
129129
_element.disabled = true;

lib/web_ui/lib/src/engine/semantics/semantics_helper.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ class MobileSemanticsEnabler extends SemanticsEnabler {
331331
case 'touchstart':
332332
case 'touchend':
333333
final html.TouchEvent touch = event as html.TouchEvent;
334-
activationPoint = touch.changedTouches.first.client;
334+
activationPoint = touch.changedTouches!.first.client;
335335
break;
336336
default:
337337
// The event is not relevant, forward to framework as normal.

lib/web_ui/lib/src/engine/semantics/text_field.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -165,17 +165,17 @@ class TextField extends RoleManager {
165165
_textFieldElement.addEventListener('touchstart', (html.Event event) {
166166
textEditing.useCustomEditableElement(textEditingElement);
167167
final html.TouchEvent touchEvent = event as html.TouchEvent;
168-
lastTouchStartOffsetX = touchEvent.changedTouches.last.client.x;
169-
lastTouchStartOffsetY = touchEvent.changedTouches.last.client.y;
168+
lastTouchStartOffsetX = touchEvent.changedTouches!.last.client.x;
169+
lastTouchStartOffsetY = touchEvent.changedTouches!.last.client.y;
170170
}, true);
171171

172172
_textFieldElement.addEventListener('touchend', (html.Event event) {
173173
final html.TouchEvent touchEvent = event as html.TouchEvent;
174174

175175
if (lastTouchStartOffsetX != null) {
176176
assert(lastTouchStartOffsetY != null);
177-
final num offsetX = touchEvent.changedTouches.last.client.x;
178-
final num offsetY = touchEvent.changedTouches.last.client.y;
177+
final num offsetX = touchEvent.changedTouches!.last.client.x;
178+
final num offsetY = touchEvent.changedTouches!.last.client.y;
179179

180180
// This should match the similar constant define in:
181181
//

lib/web_ui/lib/src/engine/surface/scene.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class PersistedScene extends PersistedContainerSurface {
3838
// TODO(yjbanov): in the add2app scenario where we might be hosted inside
3939
// a custom element, this will be different. We will need to
4040
// update this code when we add add2app support.
41-
final double screenWidth = html.window.innerWidth.toDouble();
42-
final double screenHeight = html.window.innerHeight.toDouble();
41+
final double screenWidth = html.window.innerWidth!.toDouble();
42+
final double screenHeight = html.window.innerHeight!.toDouble();
4343
_localClipBounds = ui.Rect.fromLTRB(0, 0, screenWidth, screenHeight);
4444
_localTransformInverse = Matrix4.identity();
4545
_projectedClip = null;

0 commit comments

Comments
 (0)