Flutter自定義搜索框效果
本文實(shí)例為大家分享了Flutter自定義搜索框效果的具體代碼,供大家參考,具體內(nèi)容如下
效果

實(shí)現(xiàn)方式
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:keduo/base/baseSize.dart';
import 'package:keduo/utils/icon_utils.dart';
class SearchBarWidget extends StatefulWidget {
final ValueChanged<String> onchangeValue;
final VoidCallback onEditingComplete;
const SearchBarWidget({this.onchangeValue, this.onEditingComplete, Key key})
: super(key: key);
@override
SearchBarWidgetState createState() => SearchBarWidgetState();
}
class SearchBarWidgetState extends State<SearchBarWidget> {
///編輯控制器
TextEditingController _controller;
///是否顯示刪除按鈕
bool _hasDeleteIcon = false;
@override
void initState() {
super.initState();
_controller = TextEditingController();
}
Widget buildTextField() {
//theme設(shè)置局部主題
return TextField(
controller: _controller,
textInputAction: TextInputAction.search,
keyboardType: TextInputType.text,
maxLines: 1,
decoration: InputDecoration(
//輸入框decoration屬性
contentPadding:
const EdgeInsets.symmetric(vertical: 10.0, horizontal: 1.0),
//設(shè)置搜索圖片
prefixIcon: Padding(
padding: EdgeInsets.only(left: 0.0),
child: ImageIcon(
AssetImage(
IconUtils.getIconPath('ic_edit_search'),
),
color: Colors.black26,
),
),
prefixIconConstraints: BoxConstraints(
//設(shè)置搜索圖片左對(duì)齊
minWidth: 30,
minHeight: 25,
),
border: InputBorder.none, //無邊框
hintText: " 請(qǐng)輸入商品名",
hintStyle: new TextStyle(fontSize: BaseSize.sp(14), color: Colors.grey),
//設(shè)置清除按鈕
suffixIcon: Container(
padding: EdgeInsetsDirectional.only(
start: 2.0,
end: _hasDeleteIcon ? 0.0 : 0,
),
child: _hasDeleteIcon
? new InkWell(
onTap: (() {
setState(() {
/// 保證在組件build的第一幀時(shí)才去觸發(fā)取消清空內(nèi)容
WidgetsBinding.instance
.addPostFrameCallback((_) => _controller.clear());
_hasDeleteIcon = false;
});
}),
child: Icon(
Icons.cancel,
size: 18.0,
color: Colors.grey,
),
)
: new Text(''),
),
),
onChanged: (value) {
setState(() {
if (value.isEmpty) {
_hasDeleteIcon = false;
} else {
_hasDeleteIcon = true;
}
widget.onchangeValue(_controller.text);
});
},
onEditingComplete: () {
FocusScope.of(context).requestFocus(FocusNode());
widget.onEditingComplete();
},
style: new TextStyle(fontSize: 14, color: Colors.black),
);
}
@override
Widget build(BuildContext context) {
return Container(
//背景與圓角
decoration: new BoxDecoration(
border: Border.all(color: Colors.black12, width: 1.0), //邊框
color: Colors.black12,
borderRadius:
new BorderRadius.all(new Radius.circular(BaseSize.dp(18))),
),
alignment: Alignment.center,
height: BaseSize.dp(36),
padding: EdgeInsets.fromLTRB(10.0, 0.0, 0.0, 0.0),
child: buildTextField(),
);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}
使用
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
brightness: Brightness.light,
leading: IconButton(
icon: Image.asset(IconUtils.getIconPath('fanhui')),
onPressed: () => Navigator.pop(context)),
title: SearchBarWidget(
onchangeValue: (value) {
print(value);
},
onEditingComplete: () {
print('編輯結(jié)束');
},
),
backgroundColor: Colors.white,
),
body: Text(''),
backgroundColor: BaseColor.colorFFF5F5F5,
);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android studio 出現(xiàn)錯(cuò)誤Run with --stacktrace option to get the s
這篇文章主要介紹了 Android studio 出現(xiàn)錯(cuò)誤Run with --stacktrace option to get the stack trace. Run with --info or --debu的相關(guān)資料,需要的朋友可以參考下2016-11-11
Android應(yīng)用開發(fā)中自定義ViewGroup視圖容器的教程
這篇文章主要介紹了Android應(yīng)用開發(fā)中自定義ViewGroup視圖容器的教程,重點(diǎn)在于View之間的參數(shù)傳遞,文中還講到了使用ViewDragHelper自定義ViewGroup的方法,需要的朋友可以參考下2016-04-04
Android開發(fā)中ImageLoder進(jìn)行圖片加載和緩存
這篇文章主要介紹了Android開發(fā)中ImageLoder進(jìn)行圖片加載和緩存的相關(guān)資料,需要的朋友可以參考下2016-04-04
Android開發(fā)之DatePickerDialog、TimePickerDialog時(shí)間日期對(duì)話框用法示例
這篇文章主要介紹了Android開發(fā)之DatePickerDialog、TimePickerDialog時(shí)間日期對(duì)話框用法,結(jié)合實(shí)例形式分析了Android使用DatePickerDialog、TimePickerDialog顯示日期時(shí)間相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
Android 中讀取SD卡文件時(shí)拋出NullPointerException錯(cuò)誤解決辦法
這篇文章主要介紹了Android 中讀取SD卡文件時(shí)拋出NullPointerException錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android實(shí)現(xiàn)發(fā)送短信功能實(shí)例詳解
這篇文章主要介紹了Android實(shí)現(xiàn)發(fā)送短信功能的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)發(fā)送短信的原理、步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-02-02
Android視頻播放器屏幕左側(cè)邊隨手指上下滑動(dòng)亮度調(diào)節(jié)功能的原理實(shí)現(xiàn)
這篇文章主要介紹了Android視頻播放器屏幕左側(cè)邊隨手指上下滑動(dòng)亮度調(diào)節(jié)功能的原理實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
簡(jiǎn)單實(shí)現(xiàn)安卓里百度地圖持續(xù)定位
本文主要介紹了在安卓的百度地圖開發(fā)里面簡(jiǎn)單實(shí)現(xiàn)持續(xù)定位的方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
關(guān)于Android短信驗(yàn)證碼的獲取的示例
本篇文章主要介紹了關(guān)于Android短信驗(yàn)證碼的獲取的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
Eclipse新建Android項(xiàng)目報(bào)錯(cuò)解決方案詳細(xì)匯總
這篇文章主要介紹了Eclipse新建Android項(xiàng)目報(bào)錯(cuò)解決方案詳細(xì)匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

