IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter组件封装 搜索框 -> 正文阅读

[移动开发]Flutter组件封装 搜索框

  • 相信小白刚刚开始使用Flutter的时候都会感觉自带的组件都好丑,还要自己设置各种样式。接下来就直接上正题:贴代码!!
  1. 将下面的代码复制到你工程下组件目录。

????????

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
//搜索框
class SearchIow extends StatelessWidget {

  final TextEditingController? textController; //内容
  final onChanged; //输入监听
  final onSubmitted; //键盘回车监听
  final hintText;  //提示文本
  final TextInputType textInputType;//设置键盘弹出时类型

  SearchIow({
    this.textController,
    this.onChanged,
    this.hintText = '请输入内容',
    this.textInputType = TextInputType.text,
    this.onSubmitted
  });

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: new BoxDecoration(
        border: Border.all(color: Colors.grey, width: 0.0), //灰色的一层边框
        color: Colors.white,
        borderRadius: BorderRadius.all( Radius.circular(6.66)),
      ),
      alignment: Alignment.center,
      height: 38,
      // margin: EdgeInsets.fromLTRB(24, 9, 9, 12),
      padding: EdgeInsets.only(left: 6, right: 6),
      child: TextField(
        controller: textController,
        maxLines: 1,
        focusNode: FocusNode(),
        autofocus: false,
        cursorColor: Colors.blue,
        onChanged: onChanged ?? (value){
          print("正在输入内容:$value");
        },
        onSubmitted: onSubmitted ?? (text){
          print('submit $text');
        },
        keyboardType: textInputType,
        textAlignVertical: TextAlignVertical.center, //添加图标后会有一个小的向上偏移
        decoration: InputDecoration(
            contentPadding: const EdgeInsets.only(left: -13),//内容内边距,影响高度
            hintText: hintText,
            border: InputBorder.none,
            isCollapsed: true, //相当于高度包裹的意思,必须设置为true,不然有默认奇妙的最小高度
            fillColor: Colors.white, //背景颜色,必须结合filled: true,才有效
            filled: true, //必须设置为true,fillColor才有效
            isDense:true,
            icon: Padding(padding: EdgeInsets.only(left: 3),child: Icon(Icons.search,size: 22,),),
            suffixIcon: GestureDetector(
              onTap: () {
                //addPostFrameCallback是 StatefulWidge 渲染结束的回调,只会被调用一次
                SchedulerBinding.instance!.addPostFrameCallback((_) {
                  textController!.text = "";
                });
              },
              child: Padding(
                padding: EdgeInsets.all(0),
                child: Icon(Icons.close,size: 23,),
              ),
            )
        ),
      ),
    );
  }
}
  1. 使用方法

????????

SearchIow(
            textController: text,
            textInputType: TextInputType.text,
            onSubmitted: (value){
              print("$value");
            },
            onChanged: (value){
              print("$value");
            },
          ),
  1. 效果如下,相信一定能帮到你。是不是很好用。好用给个三连支持一下,我会继续努力做出更好用的更好看的组件,让开发不在困难!!!

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:49:24  更:2021-11-11 12:51:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:31:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码