手寫簽名效果)
如何使用Flutter實現(xiàn)手寫簽名的效果思路需要監(jiān)聽用戶觸摸的起始點和結束點并記錄途經(jīng)點這里我使用了StreamController將途經(jīng)點從起始位置到結束位置繪制出來這里用到CustomPainter繪制流程獲取觸摸點作為畫筆的起始點手機途經(jīng)點繪制途徑路線結束觸摸點重置畫筆具體實現(xiàn)需要一個Listener用來監(jiān)聽用戶行為并將這些行為的點添加到StreamController中 兩個變量final List _points []; //承載對應的點final StreamController _controller StreamController(); //數(shù)據(jù)通信Widget _buildWriteWidget() { return Stack( children: [ Listener( //用來監(jiān)聽用戶的觸摸行為 child: Container( color: Colors.transparent, ), onPointerDown: (PointerDownEvent event) { _points.add(event.localPosition); _controller.sink.add([_points]); //起始點的記錄 }, onPointerMove: (PointerMoveEvent event) { _points.add(event.localPosition); _controller.sink.add([_points]); //添加途經(jīng)點 }, onPointerUp: (PointerUpEvent event) { _points.add(Offset.zero); //結束的標記 }, ), StreamBuilder( stream: _controller.stream, builder: (BuildContext context, AsyncSnapshot snapshot) { return snapshot.hasData ? CustomPaint(painter: LinePainter(snapshot.data)) //關聯(lián)數(shù)據(jù)到Painter : const SizedBox(); }), Positioned( bottom: 50, right: 50, child: FloatingActionButton( onPressed: () { _clear(); }, child: const Icon(Icons.cleaning_services), )) ], ); }清除StreamController的內(nèi)容重置數(shù)據(jù)void _clear() { _points.clear(); _controller.add(null); }dispose時釋放StreamControlleroverride void dispose() { _controller.close(); super.dispose(); }畫筆Painterclass LinePainter extends CustomPainter { final ListListOffset lines; final Color paintColor Colors.black; final Paint _paint Paint(); LinePainter(this.lines); override void paint(Canvas canvas, Size size) { _paint.strokeCap StrokeCap.round; _paint.strokeWidth 5.0; if (lines.isEmpty) { canvas.drawPoints(PointMode.polygon, [Offset.zero, Offset.zero], _paint); } else { for (int i 0; i lines.length; i) { for (int j 0; j lines[i].length - 1; j) { if (lines[i][j] ! Offset.zero lines[i][j 1] ! Offset.zero) { canvas.drawLine(lines[i][j], lines[i][j 1], _paint); //繪制相應的點 } } } } } override bool shouldRepaint(covariant CustomPainter oldDelegate) true; }作者Jerry815鏈接https://juejin.cn/post/7180186082489663547最后如果想要成為架構師或想突破20~30K薪資范疇那就不要局限在編碼業(yè)務要會選型、擴展提升編程思維。此外良好的職業(yè)規(guī)劃也很重要學習的習慣很重要但是最重要的還是要能持之以恒任何不能堅持落實的計劃都是空談。如果你沒有方向這里給大家分享一套由阿里高級架構師編寫的《Android八大模塊進階筆記》幫大家將雜亂、零散、碎片化的知識進行體系化的整理讓大家系統(tǒng)而高效地掌握Android開發(fā)的各個知識點。相對于我們平時看的碎片化內(nèi)容這份筆記的知識點更系統(tǒng)化更容易理解和記憶是嚴格按照知識體系編排的。全套視頻資料一、面試合集二、源碼解析合集三、開源框架合集歡迎大家一鍵三連支持若需要文中資料直接點擊文末CSDN官方認證微信卡片免費領取↓↓↓