????????Flutter是谷歌推出的跨平臺UI框架,其高效的跨平臺性能已經(jīng)受到很多用戶的認(rèn)可,其所構(gòu)建的"無差別"應(yīng)用主要依賴底層繪制引擎-Skia,Skia Graphics Library是一個由C++編寫的開放源代碼圖形庫,最初由Skia公司開發(fā)畅哑,被Google收購后以New BSD License許可下開源.平常Flutter開發(fā)只需編寫Dart語言代碼,繪制交由Skia去完成.
????????當(dāng)然,Flutter目前還有許多待完善的地方,比如APP或者頁面的生命周期,AOP,線程通信,Flutter生態(tài)等,基本的應(yīng)用開發(fā),Flutter應(yīng)該能夠滿足,當(dāng)然還存在不能解決或者比較難填的坑,這時我們可以構(gòu)建原生平臺插件或者直接調(diào)用原生平臺來輔助解決.
Flutter插件開發(fā)
主要有幾步:
1.構(gòu)建插件項目
1)通過命令:
flutter create --template=plugin -i swift -a kotlin plugin_name
2)或者通過IDE新創(chuàng)建一個plugin工程
2.編寫插件Dart代碼
這里封裝的主要是你想暴露給調(diào)用者的一些API
3.編寫plugin原生代碼
1)編寫iOS端plugin代碼,并且通過建立的methodChannel通道相互傳遞消息
2)編寫Android端plugin代碼,并且通過建立的methodChannel通道相互傳遞消息
????????消息通過除了methodChannel,還可以通過建立其他方式:BasicMessageChannel,EventChannel來建立消息通道.
4.添加依賴
????????這步是可選項,如果你的原生plugin依賴了其他pub,Android需要在build.gradle中添加依賴,iOS需要在plugin_name.podspec中添加依賴.
5.調(diào)試&測試
在發(fā)布到pub.dev倉庫之前,我們自己開發(fā)的插件要進(jìn)行必要的調(diào)試和測試
6.發(fā)布
以上步驟完成之后,就可以通過命令,將你的plugin發(fā)布到pub.dev倉庫了.
1)檢測插件是否有潛在問題:
flutter packages pub publish --dry-run
2)正式發(fā)布
flutter packages pub publish
FlutterSocket
Demo 演示
????????flutter_socket_plugin是一個實用的跨平臺socket插件,目前已經(jīng)實現(xiàn)client端的基本功能:創(chuàng)建,連接,發(fā)送消息,收消息,斷開連接,心跳等功能.
iOS端
????????iOS端主要封裝的是CocoaAsyncSocket中的GCDAsyncSocket,GCDAsyncSocket是client和server socket的集合,可以創(chuàng)建客戶端和服務(wù)端.源碼在[這里](https://github.com/robbiehanson/CocoaAsyncSocket.
Android端
????????Android端封裝的是OkSocket,這里只集成了其client部分.原項目作者考慮的多了一點(diǎn),把消息包頭也考慮進(jìn)去了,使用的時候查看一下文檔,源碼在這里.
添加依賴
dependencies:
flutter_socket_plugin: 0.0.1
使用示例
import 'package:flutter_socket_plugin/flutter_socket_plugin.dart';
///
/// @Method: initSocket
/// @Parameter:
/// @ReturnType:
/// @Description: init socket
/// @author: waitwalker
/// @Date: 2019-08-23
///
initSocket() {
/// init socket
flutterSocket = FlutterSocket();
/// listen connect callback
flutterSocket.connectListener((data){
print("connect listener data:$data");
});
/// listen error callback
flutterSocket.errorListener((data){
print("error listener data:$data");
});
/// listen receive callback
flutterSocket.receiveListener((data){
print("receive listener data:$data");
if (data != null) {
receiveMessage = receiveMessage + "\n" + data;
}
setState(() {
});
});
/// listen disconnect callback
flutterSocket.disconnectListener((data){
print("disconnect listener data:$data");
});
}
示例
創(chuàng)建 socket
:
await flutterSocket.createSocket("192.168.8.120", 10007, timeout: 20);
發(fā)起連接 connect
:
flutterSocket.tryConnect();
發(fā)送消息 send
:
flutterSocket.send(textEditingController.text);
斷開連接 disconnect
:
flutterSocket.tryDisconnect();
示例目錄
????????你可以在這里查看FlutterSocket的全部示例.
未來
????????fFlutterSocket目前實現(xiàn)了客戶端基本String消息的收發(fā),未來在條件允許的情況下,逐步完善功能,如果你急需一些功能,你可以在FlutterSocket的基礎(chǔ)上繼續(xù)添加功能,讓FlutterSocket功能更加強(qiáng)大和完善!
博客地址&相關(guān)文章
博客地址: https://waitwalker.cn/