开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易
最近一直在持續(xù)的學習 Flutter,但一直沒有發(fā)現(xiàn)有好用的網(wǎng)絡調試工具,也不想太想使用 Charles 這個工具,后來發(fā)現(xiàn)了Facebook Flipper 這個工具,所以花了幾天時間做了個 Flutter 版的 Flipper SDK。期間碰到了一些問題但 Flipper 項目的人迅速的幫忙。
這個庫可以讓你能夠在 Flipper 上查看你的 Flutter 應用的網(wǎng)絡請求及 Preferences 數(shù)據(jù),相比之前我之前使用 print 來輸出請求數(shù)據(jù)來說,實在是方便了好多,如果你也在用 Flutter 開發(fā)你的應用,不妨來試一下吧。
特性
- Network inspector
- Shared preferences (and UserDefaults) inspector
集成到你的項目
必備條件
開始之前確保你已安裝:
- 已安裝 Flipper Desktop
安裝
添加以下內容到包的 pubspec.yaml 文件中:
dependencies:flutter_flipperkit: ^0.0.2根據(jù)示例更改項目的 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'根據(jù)示例更改項目的 android/app/build.gradle 文件:
Flipper 目前需要的 sdkVersion 為 28 android { - compileSdkVersion 27 + compileSdkVersion 28defaultConfig { - targetSdkVersion 27 + targetSdkVersion 28} }您可以通過命令行安裝軟件包:
$ flutter packages get快速集成
添加下列代碼到 lib/main.dart 文件:
import 'package:flutter_flipperkit/flutter_flipperkit.dart';void main() {FlipperClient flipperClient = FlipperClient.getDefault();// 添加網(wǎng)絡插件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 {// 發(fā)送請求數(shù)據(jù)到 Flipperthis._reportRequest(options);return options;};this._http.interceptor.response.onSuccess = (Response response) {// 發(fā)送響應數(shù)據(jù)到 Flipperthis._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('https://www.v2ex.com/api/topics/hot.json');運行程序
這時,集成已經(jīng)完成,啟用應用后可在 Flipper Desktop 上實時看到你的網(wǎng)絡請求了
$ flutter run已知問題
- Flipper Desktop 中文亂碼,但已解決并提交 PR 給官方,暫時可以使用我修改的版本 https://github.com/lijy91/fli...
- 暫不支持 iOS 真機
探討
如果您對此項目有任何建議或疑問,可以通過 Telegram 或我的微信進行討論。
相關鏈接
- https://github.com/blankapp/f...
- https://github.com/facebook/f...
總結
以上是生活随笔為你收集整理的开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非技术相关的文章
- 下一篇: 透过 OKR 进行项目过程管理