Flutter可重复使用的组件

时间:2019-06-27 11:46:01

标签: android ios mobile flutter cross-platform

问题

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

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

到目前为止我尝试过的事情

我已按照https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps的步骤进行操作,并且可以正常工作,但是功能似乎受到很大限制。

我的问题是

  1. 如何添加这样的多个flutter项目,每个项目代表一个可重用的组件?那是走的路吗?
  2. 我是否可以使用更小的组件-例如在iOS中使用UIViews代替FlutterViewController而不使用本机黑客?
  3. 如何处理本机部分与Flutter部分之间以及导航之间的数据传递?

1 个答案:

答案 0 :(得分:1)

功能似乎受限制”是什么意思?

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

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

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

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

关于在本机和Flutter之间传递数据的

第三个问题将涉及https://flutter.dev/docs/development/platform-integration/platform-channels

  1. 从Flutter到本机,这是一个Android示例https://stackoverflow.com/a/49308193/6668797,传递了值“ text”:

    truncate(tableTD[i].textContent, 60)
    
  2. 从本地到Flutter,您使用// flutter side, send the data final String result = await platform.invokeMethod('getBatteryLevel', {"text":text}); // native side, retrieve it String text = call.argument("text"); 将其发送回result.success(batteryLevel);