3

在颤振中,我有这个:

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
}

为什么这不起作用?颤振代码只是加载初始视图,而不是我从“/Cards”路由中的视图。

4

2 回答 2

0

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

于 2019-02-05T17:29:13.837 回答
0

我发现问题self.flutterEngine?.run(withEntrypoint: nil)出在文档Add Flutter to existing apps中。如果你这样做,FlutterEngine将在你创建之前运行,FlutterViewController所以你不能setInitialRoute. 要解决,您必须删除该行 in AppDelegate, init FlutterViewControllerwithout FlutterEngine let flutterViewController = FlutterViewController(nibName: nil, bundle: nil), and setInitialRoute, final call flutterEngine?.run(withEntrypoint: nil)

于 2019-02-22T04:35:24.743 回答