Я изо всех сил пытаюсь интегрировать библиотеку Particle Device Setup в приложение Flutter.Я последовал примеру Flutter.io, как интегрировать Каналы платформы , чтобы связать приложение Flutter с собственным кодом.Я успешно открыл соединение с родным Particle SDK и могу настроить Photon.Тем не менее, я не могу прогрессировать отсюда.
Мое намерение состоит в том, чтобы перенаправить пользователя на новую страницу при успешном возвращении из фазы установки.Если фаза установки не удалась, пользователь должен иметь возможность начать заново (эта функция еще не реализована).
В классе ParticleSetupState
из initState()
я звоню initiateParticleSetup();
.
Я инициализировал следующие переменные:
static const platform = const MethodChannel("unique_placeholder/particle-setup");
String _particleSetup = "awaiting";
String particleSetup = "placeholder";
initParticleSetup()
структурирован следующим образом:
Future<Null> initiateParticleSetup() async {
String route = "";
Map<String, dynamic> arguments = {};
arguments.putIfAbsent("route", () => route);
print("route: $route");
try {
tempRoute = await platform.invokeMethod("initParticleSetup", arguments);
// Must be a valid route or a parameter passed back from the result of
// the setup phase making the application navigate to the next screen
// upon successful configuration.
particleSetup = route;
} catch (e) {
particleSetup = "Error: $e"; // Should allow the users to configure the setup again.
}
if(!mounted) { return; }
print("After finishing native code: $route"); // This line is causing the the VERBOSE-2 errors messages
}
AppDelegate
содержит следующий код:
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
) -> Bool {
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController;
let initParticleSetupChannel = FlutterMethodChannel.init(name: "unique_placeholder/particle-setup", binaryMessenger: controller);
initParticleSetupChannel.setMethodCallHandler({
(call: FlutterMethodCall, result: FlutterResult) -> Void in
if ("initParticleSetup" == call.method) {
print("Just entered initParticleSetup")
let argument = call.arguments as? NSDictionary
var route = argument!["route"] as? String
print("initial route: \(route)")
self.initParticleSetup(result: result)
route = "/proceed"
print("route is overwritten: \(route)")
result(route)
print("leaving initParticleSetup")
} else {
result(FlutterMethodNotImplemented);
}
});
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
private func initParticleSetup(result: FlutterResult) {
if let setupController = ParticleSetupMainController(setupOnly: true) {
print("before self.window? stuff")
self.window?.rootViewController?.present(setupController, animated: true, completion: nil)
print("after self.window? stuff")
}
}
Когда я закончу фазу настройки и вернусь к коду флаттера, вconsole:
[VERBOSE-2:engine.cc(157)] Could not prepare to run the isolate
[VERBOSE-2:engine.cc(116)] Engine not prepare and launch isolate.
[VERBOSE-2:FlutterViewController.mm(462)] Could not launch engine with configuration.
Я подозреваю, что это вызвано print () после метода try {} catch {}
, так как «После завершения собственного кода: $ route» никогда не выводится на консоль.Я не могу понять, как преодолеть эту проблему.