Flutter 可重用组件

Posted

技术标签:

【中文标题】Flutter 可重用组件【英文标题】:Reusable components with Flutter 【发布时间】:2019-11-09 10:21:22 【问题描述】:

问题

我的想法是使用 Flutter 创建一些简单的组件,以便在我们公司的多个原生 iosandroid 项目中使用它们。

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

到目前为止我所尝试的

我已按照https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps 此处的步骤操作,它可以工作,但功能似乎非常有限。

我的问题是

    如何添加多个像这样的颤振项目,每个项目代表一个可重用的组件?这甚至是要走的路吗? 我可以有更小的组件吗?例如在 iOS 中,UIViews 代替 FlutterViewController 没有原生黑客? 如何处理原生和 Flutter 部分以及导航之间的数据传递?

【问题讨论】:

【参考方案1】:

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

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 到原生,这是一个 Android 示例 https://***.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

【讨论】:

以上是关于Flutter 可重用组件的主要内容,如果未能解决你的问题,请参考以下文章

Angular 可重用模块和组件

React 中的可重用组件

从可重用组件发送道具用于导航抽屉

如何在 Flutter 中创建和使用 SnackBar 进行重用(全局)

您如何为 angularjs 可重用组件打包资产?

使用 KnockoutJS 创建可重用组件