https://gitee.com/xiaoIos/emotion_keyboard
在iOS中,我們通過設置TextView的inputView進行鍵盤的切換。但是在Flutter中,不是這樣做,所以全部需要我們來自定義。同時在iOS中,可以直接把表情通過attachment的形式直接放在textview中,但是在Flutter中,暫時還不行,雖然TextEditingController現在已經支持TextSpan,但是光標問題導致問題頻出,看到閑魚的聊天界面輸入框也沒有實現textField圖文混排,所以采用閑魚的界面來進行實現。
聊天界面發現在Flutter中。使用 _scrollController.jumpTo(_scrollController.position.maxScrollExtent)無法滾到到最后的位置,會出現距離底部有一些空隙。
可以通過設置 reverse: true 讓listview內容進行反轉顯示 _scrollController.jumpTo(0.0) 即可滾動到最后的位置。
還要就是,在鍵盤彈出后,點擊表情進行切換,有時候會出現一閃而過,所以設置 Scaffold 的 resizeToAvoidBottomInset: false, 鍵盤彈出讓頁面不會隨着鍵盤上移,我們通過手動控制避免一閃的的問題。
幾個注意點是,為了解耦,采用 EventBus進行表情的點擊,發送,刪除。同時由於點擊表情的時候需要注意的是,表情插入的位置,要記錄之前textField的光標位置。
點擊表情的時候。如 你好,光標在你和好中間,那么插入表情應該為 你[偷笑]好,而不是 你好[偷笑]
刪除的時候,有幾種情況,1.是文本,2.表情emoji如👳👷👸💂🎅👰👼💆💇🙍🙎🙅🙆💁🙋🙇🙌🙏👤👥🚶🏃👯💃👫👬👭💏💑👪💪👈👉☝
如3.【偷笑】自定義表情