fix setInitialRoute (flutter/engine#6774)

* fix setInitialRoute
This commit is contained in:
Dan Field
2018-11-06 17:15:11 -08:00
committed by GitHub
parent f21edf9f46
commit 1a01274d0b
5 changed files with 24 additions and 7 deletions

View File

@@ -20,3 +20,4 @@ tags
Thumbs.db
.idea
pubspec.lock
.vscode/

View File

@@ -78,7 +78,7 @@ FLUTTER_EXPORT
* tree-shaken by the Dart compiler.
* @return YES if the call succeeds in creating and running a Flutter Engine instance; NO otherwise.
*/
- (bool)runWithEntrypoint:(NSString*)entrypoint;
- (BOOL)runWithEntrypoint:(NSString*)entrypoint;
/**
* Runs a Dart program on an Isolate using the specified entrypoint and Dart library,
@@ -95,7 +95,7 @@ FLUTTER_EXPORT
* this will default to the same library as the `main()` function in the Dart program.
* @return YES if the call succeeds in creating and running a Flutter Engine instance; NO otherwise.
*/
- (bool)runWithEntrypoint:(NSString*)entrypoint libraryURI:(NSString*)uri;
- (BOOL)runWithEntrypoint:(NSString*)entrypoint libraryURI:(NSString*)uri;
/**
* Sets the `FlutterViewController` for this instance. The FlutterEngine must be

View File

@@ -264,10 +264,10 @@
}));
}
- (bool)runWithEntrypoint:(NSString*)entrypoint libraryURI:(NSString*)libraryURI {
- (BOOL)createShell:(NSString*)entrypoint libraryURI:(NSString*)libraryURI {
if (_shell != nullptr) {
FML_LOG(WARNING) << "This FlutterEngine was already invoked.";
return false;
return NO;
}
static size_t shellCount = 1;
@@ -351,13 +351,20 @@
<< entrypoint.UTF8String;
} else {
[self maybeSetupPlatformViewChannels];
}
return _shell != nullptr;
}
- (BOOL)runWithEntrypoint:(NSString*)entrypoint libraryURI:(NSString*)libraryURI {
if ([self createShell:entrypoint libraryURI:libraryURI]) {
[self launchEngine:entrypoint libraryURI:libraryURI];
}
return _shell != nullptr;
}
- (bool)runWithEntrypoint:(NSString*)entrypoint {
- (BOOL)runWithEntrypoint:(NSString*)entrypoint {
return [self runWithEntrypoint:entrypoint libraryURI:nil];
}

View File

@@ -42,6 +42,7 @@
- (shell::FlutterPlatformViewsController*)platformViewsController;
- (FlutterTextInputPlugin*)textInputPlugin;
- (void)launchEngine:(NSString*)entrypoint libraryURI:(NSString*)libraryOrNil;
- (BOOL)createShell:(NSString*)entrypoint libraryURI:(NSString*)libraryOrNil;
@end

View File

@@ -37,6 +37,7 @@
blink::ViewportMetrics _viewportMetrics;
BOOL _initialized;
BOOL _viewOpaque;
BOOL _engineNeedsLaunch;
}
#pragma mark - Manage and override all designated initializers
@@ -49,6 +50,7 @@
if (self) {
_viewOpaque = YES;
_engine.reset([engine retain]);
_engineNeedsLaunch = NO;
_flutterView.reset([[FlutterView alloc] initWithDelegate:_engine opaque:self.isViewOpaque]);
_weakFactory = std::make_unique<fml::WeakPtrFactory<FlutterViewController>>(self);
@@ -68,8 +70,8 @@
_weakFactory = std::make_unique<fml::WeakPtrFactory<FlutterViewController>>(self);
_engine.reset([[FlutterEngine alloc] initWithName:@"io.flutter" project:projectOrNil]);
_flutterView.reset([[FlutterView alloc] initWithDelegate:_engine opaque:self.isViewOpaque]);
[_engine.get() runWithEntrypoint:nil];
[_engine.get() setViewController:self];
[_engine.get() createShell:nil libraryURI:nil];
_engineNeedsLaunch = YES;
[self performCommonViewControllerInitialization];
}
@@ -371,6 +373,12 @@
- (void)viewWillAppear:(BOOL)animated {
TRACE_EVENT0("flutter", "viewWillAppear");
if (_engineNeedsLaunch) {
[_engine.get() launchEngine:nil libraryURI:nil];
[_engine.get() setViewController:self];
_engineNeedsLaunch = NO;
}
// Only recreate surface on subsequent appearances when viewport metrics are known.
// First time surface creation is done on viewDidLayoutSubviews.
if (_viewportMetrics.physical_width)