Flutter:搜索页,搜索bar封装

ops/2025/1/24 10:01:53/

在这里插入图片描述

view
使用内置的Chip简化布局

import 'package:chenyanzhenxuan/common/index.dart';
import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';import 'index.dart';class SearchGoodsPage extends GetView<SearchGoodsController> {const SearchGoodsPage({super.key});// 搜索Widget _buildSearch() {return <Widget>[SearchWidget(type: 'input',inputBgColor: AppTheme.pageBgColor,controller: controller.searchController,onChange: (value) {controller.onSearchChange(value);},),].toRow().paddingAll(30.w).card(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0)));}// 热门搜索Widget _buildHotSearch() { return <Widget>[<Widget>[TDImage(assetUrl: 'assets/img/hot.png',width: 34.w,height: 34.w,),SizedBox(width: 10.w,),TextWidget.body('热门搜索',size: 28.sp,),].toRow().paddingHorizontal(30.w),<Widget>[for(var i = 0; i < 6; i++)Chip(label: TextWidget.body('热门搜索$i',size: 24.sp,color: AppTheme.color999,),backgroundColor: AppTheme.blockBgColor,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.w)),)].toWrap(spacing: 20.w,runSpacing: 0,).paddingLeft(30.w),].toColumn(crossAxisAlignment: CrossAxisAlignment.start);}// 历史记录Widget _buildHistory() {return <Widget>[<Widget>[TextWidget.body('历史记录',size: 28.sp,),TDImage(assetUrl: 'assets/img/hot-del.png',width: 28.w,height: 32.w,),].toRow(mainAxisAlignment: MainAxisAlignment.spaceBetween).paddingHorizontal(30.w),<Widget>[Chip(label: TextWidget.body('精品专精品专区区',size: 24.sp,color: AppTheme.color999,),backgroundColor: AppTheme.blockBgColor,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.w)),deleteIconColor: AppTheme.color999,onDeleted: () {print('删除');},),for(var i = 0; i < 6; i++)Chip(label: TextWidget.body('精品专区',size: 24.sp,color: AppTheme.color999,),backgroundColor: AppTheme.blockBgColor,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.w)),deleteIconColor: AppTheme.color999,onDeleted: () {print('删除');},)].toWrap(spacing: 20.w,runSpacing: 0,).paddingLeft(30.w),].toColumn(crossAxisAlignment: CrossAxisAlignment.start);}// 主视图Widget _buildView() {return <Widget>[_buildSearch(),SizedBox(height: 30.w,),_buildHotSearch(),SizedBox(height: 30.w,),_buildHistory(),const EmptyState()].toColumn();}@overrideWidget build(BuildContext context) {return GetBuilder<SearchGoodsController>(init: SearchGoodsController(),id: "search_goods",builder: (_) {return Scaffold(backgroundColor: AppTheme.pageBgColor, // 自定义颜色appBar: const TDNavBar(height: 44,title: "搜索",titleFontWeight: FontWeight.w600,backgroundColor: Colors.white,screenAdaptation: true,useDefaultBack: true,),body: SingleChildScrollView(child: _buildView(),),);},);}
}

controller

import 'package:get/get.dart';
import 'package:flutter/material.dart';
class SearchGoodsController extends GetxController {SearchGoodsController();// 搜索框final searchController = TextEditingController();@overridevoid onReady() {super.onReady();_initData();}@overridevoid onClose() {super.onClose();searchController.dispose();}// 初始化数据_initData() {update(["search_goods"]);}// 搜索框发送改变void onSearchChange(String value) {print('搜索内容: $value');searchController.text = value;update(["search_goods"]);}
}

SearchWidget

import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import 'package:chenyanzhenxuan/common/index.dart';class SearchWidget extends StatelessWidget {// 类型final String type;// 搜索框控制器final TextEditingController? controller;// 输入框背景色final Color? inputBgColor;// 搜索框发送改变final Function(String value)? onChange;const SearchWidget({super.key,required this.type,this.controller,this.inputBgColor,this.onChange,});@overrideWidget build(BuildContext context) {return <Widget>[<Widget>[TDImage(assetUrl: type == 'text' ? 'assets/img/search.png' : 'assets/img/search.png',width: 32.w,height: 32.w,),SizedBox(width: 20.w),type == 'text' ? TextWidget.body('搜索您要找的商品名称', size: 28.sp, color: AppTheme.color999) : InputWidget(placeholder: "搜索您要找的商品名称",controller: controller,).width(450.w),].toRow(),<Widget>[TextWidget.body('搜索', size: 26.sp, color: AppTheme.colorfff),].toRow(mainAxisAlignment: MainAxisAlignment.center).card(color: AppTheme.error,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.w))).tight(width: 120.w,height: 60.w).onTap(() {if(type == 'input' && controller?.text != null){onChange!(controller!.text);}}),].toRow(mainAxisAlignment: MainAxisAlignment.spaceBetween).paddingOnly(left: 30.w,right: 4.w).card(color: inputBgColor,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.w))).tight(width: 690.w, height: 68.w).onTap(() {if(type == 'text'){Get.toNamed('/search_goods_page');}});}
}

http://www.ppmy.cn/ops/152705.html

相关文章

vscode下poetry管理项目的debug配置

点击debug选项的设置按钮&#xff0c;vscode会让我们编辑launch.json文件 {"version": "0.2.0","configurations": [{"name": "Python 调试程序: 当前文件","type": "debugpy","request": &…

数据库索引(1)

数据库索引 1.索引介绍 索引是一种 特殊的数据库结果&#xff0c;由数据表中的一列或多列组合而成&#xff0c;可以用来快速查询数据表中某一些特定值的记录。 通过索引&#xff0c;查询数据是不用读完记录的所有信息&#xff0c;而只是查询索引列。否则&#xff0c;数据库系…

什么是软件架构

什么是软件架构 程序员说&#xff0c;软件架构是要决定编写哪些C程序或OO类、使用哪些库和框架 程序经理说&#xff0c;软件架构就是模块的划分和接口的定义 系统分析员说&#xff0c;软件架构就是为业务领域对象的关系建模 配置管理员说&#xff0c;软件架构就是开发出来的…

【JVM】垃圾收集器详解

你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中&#xff0c;垃圾回收&#xff08;GC&#xff09;是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…

【网络协议】【http】【https】TLS1.3

【网络协议】【http】【https】TLS1.3 TLS1.3它的签名算法和密钥交换算法&#xff0c;默认情况下是被固定了下来的&#xff0c;他的加密套件里面呢&#xff0c;只包含了对称加密算法和摘要算法 客户端和服务器第一次连接 仍然需要1RTT &#xff0c;不能0-RTT 第一次连接 1.客…

B站评论系统的多级存储架构

以下文章来源于哔哩哔哩技术 &#xff0c;作者业务 哔哩哔哩技术. 提供B站相关技术的介绍和讲解 1. 背景 评论是 B站生态的重要组成部分&#xff0c;涵盖了 UP 主与用户的互动、平台内容的推荐与优化、社区文化建设以及用户情感满足。B站的评论区不仅是用户互动的核心场所&…

Typesrcipt泛型约束详细解读

代码示例&#xff1a; // 如果我们直接对一个泛型参数取 length 属性, 会报错, 因为这个泛型根本就不知道它有这个属性 (() > {// 定义一个接口,用来约束将来的某个类型中必须要有length这个属性interface ILength{// 接口中有一个属性lengthlength:number}function getLen…

windows内核学习方向以及职位

一 初步三大方向 1. **虚拟化方向** 优势&#xff1a; - 云计算持续增长 - 容器技术发展 - 安全隔离需求增加 - 微软Azure战略重点 具体领域&#xff1a; - Hyper-V技术 - WSL2架构 - 容器隔离 - 内存虚拟化 - 设备虚拟化 发展前景&#xff1a; - 云原生技术融合 - 边缘计算…