在颤动中我有这个:
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;路由。
答案 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}}中删除该行。>