开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lijy91
V2EX    分享创造

开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易

  •  a href="Javascript:" Onclick="downVoteTopic(538303);" class="vote">
  •   lijy91 2019 年 2 月 25 日 4264 次点击
    这是一个创建于 2597 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直在持续的学习 Flutter,但一直没有发现有好用的网络调试工具,也不想太想使用 Charles 这个工具,后来发现了 Facebook Flipper 这个工具,所以花了几天时间做了个 Flutter 版的 Flipper SDK。期间碰到了一些问题但 Flipper 项目的人迅速的帮忙。

    这个库可以让你能够在 Flipper 上查看你的 Flutter 应用的网络请求及 Preferences 数据,相比之前我之前使用 print 来输出请求数据来说,实在是方便了好多,如果你也在用 Flutter 开发你的应用,不妨来试一下吧。

    特性

    • Network inspector WechatIMG223.png

    • Shared preferences (and UserDefaults) inspector WechatIMG224.png

    集成到你的项目

    必备条件

    开始之前确保你已安装:

    安装

    添加以下内容到包的 pubspec.yaml 文件中:

    dependencies: flutter_flipperkit: ^0.0.2 

    根据示例更改项目的 ios/Podfile 文件:

    Flipper 目前需要的 platform 为 8.0

    +source 'https://github.com/facebook/flipper.git' +source 'https://github.com/CocoaPods/Specs' # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '9.0' 

    根据示例更改项目的 android/app/build.gradle 文件:

    Flipper 目前需要的 sdkVersion 为 28

    android { - compileSdkVersion 27 + compileSdkVersion 28 defaultConfig { - targetSdkVersion 27 + targetSdkVersion 28 } } 

    您可以通过命令行安装软件包:

    $ flutter packages get 

    快速集成

    添加下列代码到 lib/main.dart 文件:

    import 'package:flutter_flipperkit/flutter_flipperkit.dart'; void main() { FlipperClient flipperClient = FlipperClient.getDefault(); // 添加网络插件 flipperClient.addPlugin(new FlipperNetworkPlugin()); // 添加 Preferences 插件 flipperClient.addPlugin(new FlipperSharedPreferencesPlugin()); flipperClient.start(); runApp(MyApp()); } 

    Dio 集成示例:

    import 'dart:io'; import 'package:dio/dio.dart'; import 'package:flutter_flipperkit/flutter_flipperkit.dart'; import 'package:uuid/uuid.dart'; class DioClient { Dio _http; FlipperNetworkPlugin _flipperNetworkPlugin; DioClient() { _flipperNetworkPlugin = FlipperClient .getDefault().getPlugin(FlipperNetworkPlugin.ID); Options optiOns= new Options( connectTimeout: 5000, receiveTimeout: 3000, headers: { "Accept": "application/json", "Content-Type": "application/json" }, responseType: ResponseType.JSON, ); this._http = new Dio(options); // 在拦截器中添加和 Flipper 通讯的代码 this._http.interceptor.request.OnSend= (Options options) async { // 发送请求数据到 Flipper this._reportRequest(options); return options; }; this._http.interceptor.response.OnSuccess= (Response response) { // 发送响应数据到 Flipper this._reportResponse(response); return response; }; } Dio get http { return _http; } void _reportRequest(Options options) { String requestId = new Uuid().v4(); options.extra.putIfAbsent("requestId", () => requestId); RequestInfo requestInfo = new RequestInfo( requestId: requestId, timeStamp: new DateTime.now().millisecondsSinceEpoch, uri: '${options.baseUrl}${options.path}', headers: options.headers, method: options.method, body: options.data, ); _flipperNetworkPlugin.reportRequest(requestInfo); } void _reportResponse(Response response) { Map<String, dynamic> headers = new Map(); for (var key in [] ..addAll(HttpHeaders.entityHeaders) ..addAll(HttpHeaders.requestHeaders) ..addAll(HttpHeaders.responseHeaders) ) { var value = response.headers.value(key); if (value != null && value.isNotEmpty) { headers.putIfAbsent(key, () => value); } } String requestId = response.request.extra['requestId']; ResponseInfo respOnseInfo= new ResponseInfo( requestId: requestId, timeStamp: new DateTime.now().millisecondsSinceEpoch, statusCode: response.statusCode, headers: headers, body: response.data, ); _flipperNetworkPlugin.reportResponse(responseInfo); } } 

    Dio 使用示例

    new DioClient().http.get('api/topics/hot.json'); 

    运行程序

    这时,集成已经完成,启用应用后可在 Flipper Desktop 上实时看到你的网络请求了

    $ flutter run 

    已知问题

    探讨

    如果您对此项目有任何建议或疑问,可以通过 Telegram 或我的微信进行讨论。

    image

    相关链接

    第 1 条附言    2019 年 2 月 25 日
    如果大家觉得这个项目对你有帮忙,顺手来个 Star 吧~

    https://github.com/blankapp/flutter_flipperkit
    20 条回复    2019-02-26 07:59:33 +08:00
    Hilong
        1
    Hilong  
       2019 年 2 月 25 日 via Android
    赞一个,flutter 生态就是这样靠你们一步步变好的。
    iamsee
        2
    iamsee  
       2019 年 2 月 25 日
    赞,希望 flutter 生态越来越好
    wen704
        3
    wen704  
       2019 年 2 月 25 日
    老哥流啤
    zjupigeon
        4
    zjupigeon  
       2019 年 2 月 25 日
    看好 flutter,或者这类,让跨平台的开发更简单
    itbeihe
        5
    itbeihe  
       2019 年 2 月 25 日
    老哥厉害
    OrangeM21
        6
    OrangeM21  
       2019 年 2 月 25 日
    老哥稳
    PDX
        7
    PDX  
       2019 年 2 月 25 日 via iPhone
    6
    Ann5527
        8
    Ann5527  
       2019 年 2 月 25 日
    ! Mark 一下备用
    20015jjw
        9
    20015jjw  
       2019 年 2 月 25 日 via Android
    fb flipper 用户表示感谢
    lijy91
        10
    lijy91  
    OP
       2019 年 2 月 25 日
    @Hilong
    @iamsee
    @zjupigeon Flutter 未来大有可为,我一路从 Android -> RN -> Flutter,Flutter 给我的感觉很好,不管是开发体验还是在性能体验上都非常不错。
    lijy91
        11
    lijy91  
    OP
       2019 年 2 月 25 日
    @20015jjw 我也是最近才发现的 Flipper 确实不错,还发现了一个中文乱码的 Bug 给官方提了 PR。
    Mrxxy
        12
    Mrxxy  
       2019 年 2 月 25 日
    收藏支持
    kooze
        13
    kooze  
       2019 年 2 月 25 日
    最近在做 flutter 应用,支持了!
    allenjuly7
        14
    allenjuly7  
       2019 年 2 月 25 日
    star +1
    wen704
        15
    wen704  
       2019 年 2 月 25 日
    @lijy91 现在就差 Flutter 的热更新了,我和你的路线一样,不过 RN 上有热更新, Flutter 上没有,不然现在立马把项目转 Flutter 上去.
    lijy91
        16
    lijy91  
    OP
       2019 年 2 月 25 日
    @wen704 他们官方今年的计划就有热更新,应该不远了。
    wen704
        17
    wen704  
       2019 年 2 月 25 日
    @lijy91 可以,先自己玩玩 demo 熟练起来,到时候热更新来了就换上去吧,不过看 iOS ,github 上都说很悬,可能只有安卓有,其实谷歌自己标准里也是不给热更新的...
    rrubick
        18
    rrubick  
       2019 年 2 月 25 日
    楼主两个 GitHub 号。。。
    lijy91
        19
    lijy91  
    OP
       2019 年 2 月 25 日 via iPhone
    @magic3584 一个账号,多个组织
    chenglu
        20
    chenglu  
       2019 年 2 月 26 日 via iPhone
    大赞楼主~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1375 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:49 PVG 00:49 LAX 09:49 JFK 12:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86