效果
实现方式
import'package:dio/dio.dart';import'package:flutter/material.dart';import'package:keduo/base/baseSize.dart';import'package:keduo/utils/icon_utils.dart';classSearchBarWidgetextendsStatefulWidget{
final ValueChanged<String> onchangeValue;
final VoidCallback onEditingComplete;constSearchBarWidget({this.onchangeValue,this.onEditingComplete, Key key}):super(key: key);
@override
SearchBarWidgetStatecreateState()=>SearchBarWidgetState();}classSearchBarWidgetStateextendsState<SearchBarWidget>{
TextEditingController _controller;
bool _hasDeleteIcon=false;
@overridevoidinitState(){super.initState();
_controller=TextEditingController();}
WidgetbuildTextField(){returnTextField(
controller: _controller,
textInputAction: TextInputAction.search,
keyboardType: TextInputType.text,
maxLines:1,
decoration:InputDecoration(
contentPadding:const EdgeInsets.symmetric(vertical:10.0, horizontal:1.0),
prefixIcon:Padding(
padding: EdgeInsets.only(left:0.0),
child:ImageIcon(AssetImage(
IconUtils.getIconPath('ic_edit_search'),),
color: Colors.black26,),),
prefixIconConstraints:BoxConstraints(
minWidth:30,
minHeight:25,),
border: InputBorder.none,
hintText:" 请输入商品名",
hintStyle:newTextStyle(fontSize: BaseSize.sp(14), color: Colors.grey),
suffixIcon:Container(
padding: EdgeInsetsDirectional.only(
start:2.0,
end: _hasDeleteIcon?0.0:0,),
child: _hasDeleteIcon?newInkWell(
onTap:((){setState((){
WidgetsBinding.instance.addPostFrameCallback((_)=> _controller.clear());
_hasDeleteIcon=false;});}),
child:Icon(
Icons.cancel,
size:18.0,
color: Colors.grey,),):newText(''),),),
onChanged:(value){setState((){if(value.isEmpty){
_hasDeleteIcon=false;}else{
_hasDeleteIcon=true;}
widget.onchangeValue(_controller.text);});},
onEditingComplete:(){
FocusScope.of(context).requestFocus(FocusNode());
widget.onEditingComplete();},
style:newTextStyle(fontSize:14, color: Colors.black),);}
@override
Widgetbuild(BuildContext context){returnContainer(
decoration:newBoxDecoration(
border: Border.all(color: Colors.black12, width:1.0),
color: Colors.black12,
borderRadius:newBorderRadius.all(newRadius.circular(BaseSize.dp(18))),),
alignment: Alignment.center,
height: BaseSize.dp(36),
padding: EdgeInsets.fromLTRB(10.0,0.0,0.0,0.0),
child:buildTextField(),);}
@overridevoiddispose(){super.dispose();
_controller.dispose();}}
使用
@override
Widgetbuild(BuildContext context){returnScaffold(
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('编辑结束');},),
backgroundColor: Colors.white,),
body:Text(''),
backgroundColor: BaseColor.colorFFF5F5F5,);}