Flutter软件包和Flutter插件之间有什么区别?

35
我是Flutter开发的新手,同时正在开发4个应用程序。因此,我想通过创建“plugin”或“package”来在这些应用程序之间共享代码。但是我不明白在我的情况下应该选择“package”还是“plugin”。
我将只编写dart代码,但我将使用其他包含本地代码(如Kotlin和Swift)的pub.dev插件,例如flutter_contacts其中包含Java和Swift代码。
因此,在这种情况下,我应该选择插件还是包?
简而言之,一个包可以使用插件并仍然是一个包吗?
4个回答

90

一个“package”只包含Dart代码。
一个“plugin”包含Dart和本地代码(kotlin/js/swift/...)

如果需要,一个package可以使用plugins。它仍然符合package的定义。


1
一个包可以使用插件,如果它想的话。它仍然可以被视为一个包。- 这就是我需要知道的。谢谢 - Nux

14

Flutter插件:

简而言之: 与原生相关的开发。

Flutter插件是原生代码(比如Kotlin或Java for Android 和Swift或Objective C for iOS)的包装器。Flutter通过使用平台通道和消息传递可以像原生应用一样完成任何操作。Flutter指示本地iOS/Android代码执行某个操作并将结果返回到Dart。

Flutter软件包或模块:

简而言之: 使用工具库中的代码使开发更快。

Flutter支持使用由其他开发者为Flutter和Dart生态系统贡献的共享软件包。这允许快速构建应用程序,而不必从头开始开发所有内容。


1
你好!这是否意味着,如果我想分享我的特殊UI小部件,那么它将成为一个包? - Krahmal
@Krahmal 是的,要创建和分享您的小部件(https://pub.dev/),它必须是一个包,以便任何想使用它的人都可以导入它。 - Asmoun

11
根据阅读Flutter文档:开发包和插件,我将分享我的看法,以使您清楚包和插件的区别
首先欢迎加入Flutter社区,这是一个极好的平台,可以使用单一的代码库构建适用于您的Web/Android/iOS最佳应用程序。
现在,让我们尝试消除前面提到的主题上的疑惑。 插件是什么? 包使得可以轻松共享模块化的代码。最小化的包包括以下内容。
现在是最好的部分,它将消除您的疑虑: 插件无非就是Flutter包的一部分,它是平台相关的。
包的类型:
- Dart包:用Dart编写的通用包,例如path软件包。其中一些可能包含Flutter特定功能,并因此依赖于Flutter框架,限制了其仅在Flutter中使用,例如Fluro软件包。
  • 插件包: 一种专门的Dart包,其中包含使用Dart代码编写的API以及一个或多个特定于平台的实现。 可以为Android(使用Kotlin或Java)iOS(使用Swift或Objective-C)webmacOSWindowsLinux编写插件包,也可以组合使用。一个具体示例是url_launcher插件包。要查看如何使用url_launcher包以及如何扩展它以实现对Web的支持,请参阅Harry Terkelsen在Medium上的文章。
  • 如果仍然无法澄清你的疑问,你必须查看我提供给你的第一个链接 Developing packages and plugins。它肯定会给你清晰度。


    4
    一个插件是一种特殊的包,其中包含本地的Kotlin/Java(适用于Android)或swift/Objective-C(适用于iOS)代码。 而包只包含Dart代码。
    当您需要与本地操作系统进行通信时,您需要使用插件。
    一些包和插件的示例如下:
    包:
    • http: 一个提供了易于使用的API,用于从Flutter应用中发出HTTP请求的包。

    • shared_preferences: 提供了一种简单的方式来存储和检索持久化存储中的键值对的包。

    • intl: 提供了Flutter应用的国际化和本地化支持的包。

    插件:
    • camera: 提供了访问设备相机的功能,并允许拍照和录制视频的插件。
    • firebase_messaging: 允许Flutter应用使用Firebase Cloud Messaging接收和处理推送通知的插件。
    • google_maps_flutter: 提供了一个Flutter小部件,用于使用Google Maps API显示交互式地图的插件。

    从这些例子中可以清楚地看出插件为什么需要本地代码。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接