前言
這篇文章會記錄一些再使用Flutter提供的Widget開發介面時碰到的一些小問題的解決方案和一些小技巧。在這之前我想說的是Flutter的github倉庫issue中milestones下有一個名為Golas的milestone,現在解決進度是30%。如果開發的時候碰到一些噁心的問題建議大家先去這裡搜搜,如果發現有相同的問題而且正好是那沒解決的70%。就別在這個問題上耽誤時間了(換別的思路)。
正文
問題:
InkWell設定背景色導致水波紋效果消失
new Container(
color: Colors.red,
child: new InkWell(
onTap: (){},
),
);
複製程式碼
解決:
這裡問題其實出在了Container上,InkWell其是Material元件。使用Containe的效果其實是蓋住了Inkwell而不是給InkWell設定了背景色。正確的應該是(類似問題用這個方法大多可以解決):
new Material(
color: Colors.red,
child: new InkWell(),
)
複製程式碼
問題
TextFiled游標問題。看一下導致問題的程式碼。
class _MyHomePageState extends State<MyHomePage> {
var _text = '';
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new TextField(
controller: new TextEditingController.fromValue(new TextEditingValue(text: _text)),
autofocus: true,
)),
floatingActionButton: new FloatingActionButton(
onPressed: () {
setState(() {
_text = "flutter";
});
},
tooltip: 'Autocomplete',
child: new Icon(Icons.add),
),
);
}
}
複製程式碼
再點選FloatingButton後你會發現游標會在輸入框的最前面。
解決
這個問題倒是不難解決,但總感覺怪怪的,每次set一個text還要設定一下游標的位置。
class _MyHomePageState extends State<MyHomePage> {
var _text = "";
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new TextField(
controller: new TextEditingController.fromValue(new TextEditingValue(
text: _text,
selection: new TextSelection.collapsed(offset: _text.length))),
autofocus: true,
)),
floatingActionButton: new FloatingActionButton(
onPressed: () {
setState(() {
_text = "flutter";
});
},
tooltip: 'Autocomplete',
child: new Icon(Icons.add),
),
);
}
}
複製程式碼
問題
TextFiled設定TextAlign為Center和Right游標就會出問題(Center現已修復)
解決
這個問題就坑爹了。暫時沒有太好的解決方法。有時候UI出了這種設計,可以參考微信的暱稱修改,點選跳轉下個介面輸入內容在儲存回來。
小技巧
有時候UI出了一個資訊錄入頁面,很多錄入項,外觀長都一樣,但是有的是輸入框,有的是點選選擇。我們這在時抽取UI的時候可能都會使用TextFiled。但TextField有自己的點選響應。這時候其實有兩個View來幫助我們(AbsorbPointer,IgnorePointer)來抵消TextField的點選響應。
用法:
new AbsorbPointer(
child: new TextField(
controller: new TextEditingController(
text: "flutter",
),
),
),
複製程式碼
AbsorbPointer和IgnorePointer的區別,AbsorbPointer自身還可以響應點選事件,IgnorePointer自身則不可以。事例程式碼這裡就不展示了,感興趣的朋友那GestureDetector分別包裹AbsorbPointer和IgnorePointer試一下。
最後
文中的問題我會持續關注,有更好的解決辦法會及時更新。