mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Avoid crash caused by flutterImageView be null (flutter/engine#34395)
This commit is contained in:
parent
f9609a4372
commit
438c737e98
@ -1308,6 +1308,11 @@ public class FlutterView extends FrameLayout
|
||||
getContext(), getWidth(), getHeight(), FlutterImageView.SurfaceKind.background);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public FlutterImageView getCurrentImageSurface() {
|
||||
return flutterImageView;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the current render surface to a {@link FlutterImageView} if it's not one already.
|
||||
* Otherwise, it resizes the {@link FlutterImageView} based on the current view size.
|
||||
@ -1370,7 +1375,7 @@ public class FlutterView extends FrameLayout
|
||||
public void onFlutterUiDisplayed() {
|
||||
renderer.removeIsDisplayingFlutterUiListener(this);
|
||||
onDone.run();
|
||||
if (!(renderSurface instanceof FlutterImageView)) {
|
||||
if (!(renderSurface instanceof FlutterImageView) && flutterImageView != null) {
|
||||
flutterImageView.detachFromRenderer();
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,6 +174,32 @@ public class FlutterViewTest {
|
||||
verify(imageViewMock, times(1)).closeImageReader();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void flutterImageView_revertImageViewAndAvoidNPE() {
|
||||
FlutterView flutterView = new FlutterView(ctx);
|
||||
FlutterEngine flutterEngine = spy(new FlutterEngine(ctx, mockFlutterLoader, mockFlutterJni));
|
||||
FlutterRenderer flutterRenderer = spy(new FlutterRenderer(mockFlutterJni));
|
||||
when(flutterEngine.getRenderer()).thenReturn(flutterRenderer);
|
||||
|
||||
flutterView.attachToFlutterEngine(flutterEngine);
|
||||
flutterView.convertToImageView();
|
||||
assertTrue(flutterView.renderSurface instanceof FlutterImageView);
|
||||
|
||||
// Register a `FlutterUiDisplayListener` callback.
|
||||
// During callback execution it will invoke `flutterImageView.detachFromRenderer()`.
|
||||
flutterView.revertImageView(
|
||||
() -> {
|
||||
// No-op
|
||||
});
|
||||
assertFalse(flutterView.renderSurface instanceof FlutterImageView);
|
||||
|
||||
flutterView.detachFromFlutterEngine();
|
||||
assertEquals(null, flutterView.getCurrentImageSurface());
|
||||
|
||||
// Invoke all registered `FlutterUiDisplayListener` callback
|
||||
mockFlutterJni.onFirstFrame();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onConfigurationChanged_fizzlesWhenNullEngine() {
|
||||
FlutterView flutterView = new FlutterView(Robolectric.setupActivity(Activity.class));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user