Flutter自定义搜索框效果
【Flutter自定义搜索框效果】本文实例为大家分享了Flutter自定义搜索框效果的具体代码,供大家参考,具体内容如下
效果
文章图片
实现方式
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 onchangeValue; final VoidCallback onEditingComplete; const SearchBarWidget({this.onchangeValue, this.onEditingComplete, Key key}): super(key: key); @overrideSearchBarWidgetState createState() => SearchBarWidgetState(); }class SearchBarWidgetState extends State {///编辑控制器TextEditingController _controller; ///是否显示删除按钮bool _hasDeleteIcon = false; @overridevoid initState() {super.initState(); _controller = TextEditingController(); }Widget buildTextField() {//theme设置局部主题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),//设置搜索图片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: new TextStyle(fontSize: BaseSize.sp(14), color: Colors.grey),//设置清除按钮suffixIcon: Container(padding: EdgeInsetsDirectional.only(start: 2.0,end: _hasDeleteIcon ? 0.0 : 0,),child: _hasDeleteIcon? new InkWell(onTap: (() {setState(() {/// 保证在组件build的第一帧时才去触发取消清空内容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),); }@overrideWidget 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(),); }@overridevoid dispose() {super.dispose(); _controller.dispose(); }}
使用
@overrideWidget 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('编辑结束'); },),backgroundColor: Colors.white,),body: Text(''),backgroundColor: BaseColor.colorFFF5F5F5,); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 【译】20个更有效地使用谷歌搜索的技巧
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- Flutter的ListView
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 自定义MyAdapter
- 运用flutter|运用flutter 构建一个发布版(release)APK
- Android自定义view实现圆环进度条效果
- locate搜索