Flutter 组件化

组件化格式

  • 通过Dart包:纯Flutter
  • 通过Plugin插件:如果组件不仅仅是 UI 组件,还涉及到与平台(如 Android 和 iOS)的交互,你可以使用 Flutter 的插件机制,将组件和平台代码一起封装成一个插件包。

组件化依赖方式

  • 通过pub.dev
  • 通过本地路径引用
  • 通过远程git仓库:

组件示例

  • 举🌰,现在创建一个组件my_package,管理众多子组件sub_package,项目只需要引用这个组件,就可以使用众多子组件进行开发,结构如下:

    ├── my_package
    │        └── sub_package_1(子组件1) 
    │        └── sub_plugin_2 (子组件2)
    │        └── sub_plugin_3 (子组件3)
    
  • my_package管理组件:
    • my_package/lib/my_package.dart,如下:
      library my_package;
      //通过导出其他子组件的API,对子组件进行封装,
      //项目只需要import my_package,就可以调用子组件
      export 'package: sub_package_1/sub_package_1.dart';
      export 'package: sub_plugin_2/sub_plugin_2.dart';
      export 'package: sub_plugin_3/sub_plugin_3.dart';
      
    • my_package/pubspec.yaml内容如下:
      name: my_package
      description: Private plugins / packages
      version: 0.0.1
      homepage: "https://github.com/me/my_package.git"
      
      environment:
      sdk: ^3.5.1
      flutter: ">=1.17.0"
      
      dependencies:
      flutter:
       sdk: flutter
       //通过pub.dev引用子组件sub_package_1
      sub_package_1: ^4.0.0
      //通过本地路径引用子插件sub_plugins_2
      sub_plugin_2:
       path: ../sub_plugin_2
      //通过远程仓库引用子插件sub_plugin_3
      sub_plugin_3:
       git:
         url: git@github.com:your-repo/sub_plugin_3.git
         ref: main
      dev_dependencies:
       flutter_test:
        sdk: flutter
       flutter_lints: ^4.0.0
      flutter:
      
  • 其中一个子组件sub_package1示例:
    • sub_package_1/lib/sub_package_1.dart,如下:
      library sub_package_1;
      //所有的import,export都放在这里
      import 'dart:io';
      import 'package:flutter/material.dart';
      ///part和part of 是配对使用的
      part 'src/example1.dart';
      part 'src/example2.dart';
      
    • sub_package_1/lib/src/example1.dart如下:
      ///这个文件不能使用任何import,用part of代表是my_package_1的子模块
      part of sub_package_1;
      ///功能的代码吧啦吧啦
      。。。
      
  • 在其他项目的pubspec.yaml,引用my_package,就可以使用组件了:
    dependencies
       my_package: ^0.0.1
    

    *⚠️当然,my_package如果没有发布到pub.dev,也可以参照上面my_package/pubspec.yaml,更改为本地或者远程仓库依赖方式。



发布一个Dart Package到pub.dev

  • 使用命令创建一个项目:
     flutter create --template=package my_dart_package
    
  • 文件结构如下:
    ├── CHANGELOG.md 
    ├── LICENSE 
    ├── README.md 
    ├── analysis_options.yaml 
    ├── lib
    │  └── scr 
    │       └── example.dart(具体功能代码)
    │  └── lib.dart (主要对外信息 ,相当于头文件)
    ├── pubspec.yaml (配置package 的一些信息)
    └── test
      └── test.dart (测试代码)
    
  • 举🌰,lib.dart代码如下:
    class Calculator {
       void log() {
         print('测试测试');
        }
    }
    
  • 再举个🌰,test.dart代码如下:
    import 'package:my_package/lib.dart';
    import 'package: my_package/test.dart';
    void main() {
      test('adds one to input values', () {
        calculator.log();
      });
    }
    
    运行test.dart的main(),看到调试控制台输出测试测试
  • 配置pubspec.yaml的信息:
    name: my_dart_package///不能与已有的pub.dev的包名冲突
    description: A simple Dart package that demonstrates basic math operations.
    version: 0.0.1
    author: Your Name <your.email@example.com>
    homepage: https://your-website.com
    environment:
       sdk: ">=2.12.0 <3.0.0"
    dependencies:
       # Add any required dependencies here
    dev_dependencies:
       flutter_test:
          sdk: flutter
    
  • 登录pub.dev:
    flutter pub login
    
  • 发布到pub.dev:
    ///发布前,预检查,确保没有错屋:
    flutter pub publish --dry-run
    ///发布到pub.dev
    flutter pub publish
    

发布Flutter Plugin到pub.dev

跟上面步骤一样,唯一需要注意的是,Flutter Plugin是跨平台的,在libandroid|iOS各自文件路径下,写对应的功能代码:

 flutter create --template=plugin --platforms android,ios my_plugin
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,858评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,372评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,282评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,842评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,857评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,679评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,406评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,311评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,767评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,090评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,785评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,420评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,988评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,101评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,298评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,033评论 2 355

推荐阅读更多精彩内容

  • 使用Flutter Module实现组件化的思路:Flutter组件化[https://juejin.cn/pos...
    xmb阅读 3,965评论 0 11
  • 一、Flutter四种工程类型Flutter工程中,通常有以下几种工程类型,下面分别简单概述下: Flutter ...
    WQDev阅读 344评论 0 0
  • 转载请注明出处,保持文章完整:Flutter组件化框架[https://juejin.cn/editor/draf...
    曹建峰阅读 1,962评论 1 8
  • 开发组件tkoul_channel_plugin 一.前置准备工作 1.申请谷歌账号,发布的话会用,最好能翻墙,直...
    Tkoul阅读 676评论 0 0
  • 已收录 : 100+ ❀ ❀ 尽可能收集好用的插件以便更快的开发效率,85%亲测,持续添加中 如果有好的插件或者...
    jahnli阅读 13,722评论 7 33