技术经验谈 技术经验谈
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hss01248

一号线程序员
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 学习资料

  • 技术选型

  • 要点

    • dart语言核心要点
    • 工程化

    • flutter异步
    • flutter工程化
    • flutter存储相关
    • flutter状态管理
    • flutter网络框架以及相关要点
    • flutter图片相关
    • flutter可观测性和调试
    • flutter插件开发
      • flutter路由管理
      • 遇到的问题
    • 经验

    • flutter
    • 要点
    hss01248
    2022-08-26
    目录

    flutter插件开发

    # pigeon使用

    # 开发流程

    开发具体流程可见:

    https://juejin.cn/post/7006554771674906637

    以plugin的模式创建,以自动初始化

     flutter create --template=plugin --platforms=android,ios -i swift -a java --org com.hss01248 location_util 
    
    1

    拷贝根目录下pigeon/schema.dart文件夹和run_pigeon.sh文件到根目录

    修改pigeon/schema.dart方法定义

    修改run_pigeon.sh里目标路径.

    dev_dependencies:
      pigeon: ^1.0.0
    
    1
    2

    运行run_pigeon.sh.无日志则生成代码成功.

    # 写Android和ios实现

    # 注册pigeon

    public class LocationUtilPlugin implements FlutterPlugin, MethodCallHandler {
    
      private MethodChannel channel;
    
      @Override
      public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
        channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "location_util");
        channel.setMethodCallHandler(this);
    
       //上面是模板生成的,下面是自己手动注册:
      LocationPigeon.LocationUtil.setup(flutterPluginBinding.getFlutterEngine().getDartExecutor().getBinaryMessenger(), new LocationImpl());
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 发布:

    参考官方文档: https://doc.flutterchina.club/developing-packages/

    • 配置好路径
    name: location_util
    description: flutter plugin for LocationUtil.
    version: 0.0.1
    homepage:
    publish_to: http://pub.xxx.com/
    
    1
    2
    3
    4
    5

    配置作者: https://www.cnblogs.com/mengqd/p/13928830.html

    • 测试发布

      flutter packages pub publish --dry-run
      
      1
    • 发布

    flutter packages pub publish
    
    1

    # 引用

    dependencies:
       location_util:
          version: ^0.0.1
          hosted:
            name: location_util
            url: https://xxx.xx.ccc/
    
    1
    2
    3
    4
    5
    6

    # 入参

    类型安全 or json/map?

    # 返回值

    参考后台接口返回: data,code,msg形式, 不抛出exception,而是以code,msg形式返回.

    msg在debug时返回整个堆栈,在release时返回友好的翻译信息

    # exception处理

    需要await才能catch住

    try{
    	await  _flipperNetworkPlugin.reportRequest(uniqueId,DateTime.now().millisecondsSinceEpoch,
          '${options.baseUrl}${options.path}',options.method,headers,body);
    }catch(e,s){
      debugPrint("print by dio-flutter: reportRequest--> "+e.toString());
      //+s.toString()
    }
    
    1
    2
    3
    4
    5
    6
    7

    # 兼容性问题处理

    https://juejin.cn/post/7135737121863630879

    ->条件导入/导出

    import 'platform.dart' if (dart.library.html) 'web.dart';
    import 'dart:io' if (dart.library.html) 'dart:html';
    
    1
    2

    ->分包

    ->联邦插件

    编辑 (opens new window)
    上次更新: 2022/09/30, 21:58:18
    flutter可观测性和调试
    flutter路由管理

    ← flutter可观测性和调试 flutter路由管理→

    最近更新
    01
    截图后的自动压缩工具
    12-27
    02
    图片视频文件根据exif批量重命名
    12-27
    03
    chatgpt图片识别描述功能
    02-20
    更多文章>
    Theme by Vdoing | Copyright © 2020-2025 | 粤ICP备20041795号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式