Android開發,有些系統功能不符合我們的開發需求,可能回去看看原始碼,考慮怎麼去覆寫實現,或者考慮直接拷貝原始碼,自己實現,當然如果程式碼依賴的很複雜,那麼拷貝就不是一個明智的選擇了。
這個彈窗有可能你遇到過,當我們修改程式碼原始檔的時候,androidsutido會彈出這個彈窗,給你一個提示,大多數時候我們關了這個彈窗,會當什麼都沒發生過,但是我們如果點下確定的,是可以改程式碼的,wtf!!!雖然在java這邊跑的是class,但是在flutter這邊,改了就會生效了!!!
基於以上,flutter的一個頑疾,滑動控制元件(如果沒有設定physics)裡面子介面如果可以點選,那麼父控制元件開始滑動式,會有一個抖動
問題程式碼 在方法acceptGesture(DragGestureRecognizer)
_state = _DragState.accepted;
/// 1
final Offset delta = _pendingDragOffset;
/// 2
final Duration timestamp = _lastPendingEventTimestamp;
/// 3
_pendingDragOffset = Offset.zero;
複製程式碼
當我們開始拖動的時候會執行以上程式碼,_pendingDragOffset 是用於判斷是否開始拖動的,當 _pendingDragOffset >kTouchSlop 則呼叫acceptGesture確認開始滑動,而這個時候 _pendingDragOffset 是 大於kTouchSlop的至少是18px,這個值的重置在3處,,而1處的delta是初始偏移值,所以導致了這個抖動 而,我們只需要把它改成
_state = _DragState.accepted;
/// 1
final Offset delta = Offset.zero;
/// 2
final Duration timestamp = _lastPendingEventTimestamp;
/// 3
_pendingDragOffset = Offset.zero;
複製程式碼
也就是 delta 設定為0 就好了
總結
對於flutter 改原始碼,會立即生效,即使是多人開發這個更改工作量也是很小的。而且可以直接更改系統程式碼!!!可以直接更改系統程式碼!!!可以直接更改系統程式碼!!!
因此flutter的擴充套件自用度,真的難以想象,(至少在flutter底層程式碼沒被寫進Android系統前是這樣的。。。)