问题

我的想法是使用Flutter创建一些简单的组件,以便可以在我们公司的多个本机iOS和Android项目中使用它们。

例如,考虑一个通用的登录视图。此视图可以在Flutter中编码一次,然后可以包含到同时具有iOS和Android部件(本机)的项目中。因此,此类通用组件可以使用Flutter编写一次,而不是本机iOS和Android组件编写两次。

我到目前为止已经尝试过的内容

我在这里遵循了https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps的步骤,它可以工作,但是功能似乎很受限制。

我的问题是

  • 如何添加这样的多个flutter项目,每个项目代表一个可重用的组件?那是走的路吗?
  • 我可以使用较小的组件吗,例如在iOS中使用UIViews而不是FlutterViewController而不使用本机黑客吗?
  • 如何处理本机和Flutter部分之间以及导航之间的数据传递?
  • 最佳答案

    您的“功能似乎非常受限制”是什么意思?

    https://flutter.dev/docs/development/add-to-app列出了这些限制:

  • 运行多个Flutter实例或在部分屏幕视图中运行可能具有未定义的行为。
  • 在后台模式下使用Flutter仍然是WIP。
  • 不支持将Flutter库打包到另一个可共享库中,或将多个Flutter库打包到一个应用程序中。

  • 您的第一个问题由第三个限制回答。如果您正在考虑将简单组件分别分成单独的Flutter库,则不会。您需要将所有组件打包到单个Flutter库中,然后让本地应用程序从池中选择。

    对于您的第二个问题,您能否具体说明“没有本机黑客”的含义?您是否有不能/不能使用FlutterViewController的原因?

    关于在本机和Flutter之间传递数据的第三个问题将涉及https://flutter.dev/docs/development/platform-integration/platform-channels
  • 从Flutter到native,这是一个Android示例https://stackoverflow.com/a/49308193/6668797,传递了值“text”:
    // flutter side, send the data
    final String result = await platform.invokeMethod('getBatteryLevel', {"text":text});
    
    // native side, retrieve it
    String text = call.argument("text");
    
  • 从本机到Flutter,您可以使用result.success(batteryLevel);将其发送回final String result
  • 10-04 21:56
    查看更多