【问题标题】:How to get setInitialRoute to start my Flutter iOS app on different views?如何让 setInitialRoute 在不同的视图上启动我的 Flutter iOS 应用程序?
【发布时间】:2018-11-16 18:29:42
【问题描述】:

在颤动中我有这个:

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 代码只加载初始视图,而不是我从“/Cards”路径加载的视图。

【问题讨论】:

    标签: ios flutter dart flutter-add-to-app


    【解决方案1】:

    我在从 iOS 设置初始路由时也遇到了问题,看起来这可能是颤振中的错误: https://github.com/flutter/flutter/issues/27216

    【讨论】:

      【解决方案2】:

      我在文档Add Flutter to existing apps 中发现问题是self.flutterEngine?.run(withEntrypoint: nil)。如果你这样做,FlutterEngine 将在你创建 FlutterViewController 之前运行,所以你不能setInitialRoute。 要解决,您必须删除AppDelegate 中的那一行,init FlutterViewController 不带FlutterEngine let flutterViewController = FlutterViewController(nibName: nil, bundle: nil)setInitialRoute,最终调用flutterEngine?.run(withEntrypoint: nil)

      【讨论】:

        猜你喜欢
        • 2019-04-06
        • 1970-01-01
        • 2012-03-16
        • 2019-04-07
        • 1970-01-01
        • 2018-07-06
        • 2012-02-02
        • 1970-01-01
        相关资源
        最近更新 更多