如何让setInitialRoute在不同的视图上启动我的Flutter iOS应用程序?

时间:2018-06-06 23:38:39

标签: ios dart flutter

在颤动中我有这个:

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      routes: <String, WidgetBuilder> {
        '/Cards': (BuildContext context) => new PageSelectorDemo(),
      },
      onGenerateRoute: (RouteSettings settings) => new MaterialPageRoute(
        builder: (BuildContext ctx) => new PageSelectorDemo(),
      ),
      theme: new ThemeData(
        primarySwatch: Colors.deepPurple,
      ),
      home: new MyHomePage(title: 'Flutter View'),
    );
  }
}

在我的iOS代码中,我有这个:

func getFlutterController() -> UIViewController?
{
    self.flutterController = FlutterViewController(project: nil, nibName: nil, bundle: nil)

    if let controller = self.flutterController
    {
        controller.setInitialRoute("/Cards") // setting the route
        self.messageChannel = FlutterBasicMessageChannel.init(name: "channel", binaryMessenger: controller, codec: FlutterStandardMessageCodec.sharedInstance())
        if let channel = self.messageChannel
        {
            channel.setMessageHandler() { (message:Any?, reply:FlutterReply) in
                ViewController.counter += 1
                self.labelMessage.text = "message recieved: \(ViewController.counter)"
            }
        }
    }
    return self.flutterController
}

为什么这不起作用? flutter代码只是加载了初始视图,而不是来自&#34; / Cards&#34;路由。

2 个答案:

答案 0 :(得分:0)

我在设置来自iOS的初始路由时也遇到了问题,这似乎是扑朔迷离的错误: https://github.com/flutter/flutter/issues/27216

答案 1 :(得分:0)

我发现文档Add Flutter to existing apps中的问题是self.flutterEngine?.run(withEntrypoint: nil)。如果您这样做,FlutterEngine将在您创建FlutterViewController之前运行,因此您将无法setInitialRoute。 要解决此问题,您必须删除AppDelegate中的该行,并在没有FlutterViewController FlutterEngine的情况下初始化let flutterViewController = FlutterViewController(nibName: nil, bundle: nil),并在最后调用setInitialRoute的{​​{1}}中删除该行。