当前位置: 首页 > wzjs >正文

上海网站建设做物流一html网页标题代码怎么写

上海网站建设做物流一,html网页标题代码怎么写,域名解析怎么弄,门户网站样式背景 项目中经常会有本地存储数据的需求,例如,本地存储搜索页面“搜索数据”, 如下图: 思路 进入页面时,加载本地数据点击搜索时,将搜索数据存储到本地:先读取本地数据,如果有数…

背景

项目中经常会有本地存储数据的需求,例如,本地存储搜索页面“搜索数据”, 如下图:
在这里插入图片描述

思路

  1. 进入页面时,加载本地数据
  2. 点击搜索时,将搜索数据存储到本地:先读取本地数据,如果有数据,就追加数据,并保存;如果本地没数据,就直接保存。
  3. 点击“清空所有历史记录”时,删除本地的搜索记录的数据
  4. 长按某一条数据时,展示“确认删除”弹框,删除某条数据。

代码实现

  1. 用三方库shared_preferences来实现,在项目中引入shared_preferences库:
    在这里插入图片描述

  2. 创建一个StorageService类,来封装对应的方法,代码如下:

import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';class StorageService {static final _searchKey = "SearchHistory";// 获取搜索的历史记录static Future<List<String>> getSearchHistoryString() async {final shareInstance = await  SharedPreferences.getInstance();try {final historyString = shareInstance.getString(_searchKey);print("搜索历史记录 = $historyString");if (historyString != null) {List historyList = json.decode(historyString);return historyList.map((value){return "$value";}).toList();} else {print("搜索历史记录 没有数据");return [];}} catch (e) {print("搜索历史记录 没有数据");return [];}}/* 存储搜索历史记录如果有数据,就追加数据,然后存储;如果没有数据,就新建List,添加数据,然后存储;*/static Future<void> setSearchHistoryString(String keyword) async {final shareInstance = await SharedPreferences.getInstance();try {final historyString = shareInstance.getString(_searchKey);if (historyString != null) {List historyList = json.decode(historyString);historyList.add(keyword);final dataString = json.encode(historyList);print("历史记录 = $dataString");shareInstance.setString(_searchKey, dataString);} else {List historyList = [keyword];final dataString = json.encode(historyList);print("历史记录 = $dataString");shareInstance.setString(_searchKey, dataString);}} catch (e) {List historyList = [keyword];final dataString = json.encode(historyList);print("历史记录 = $dataString");shareInstance.setString(_searchKey, dataString);}}// 删除某条历史记录static Future<List<String>> removeSearchKeyword(String keyword) async {final shareInstance = await SharedPreferences.getInstance();try {final historyString = shareInstance.getString(_searchKey);if (historyString != null) {List historyList = json.decode(historyString);List<String> historyStringList = historyList.map((value){return "$value";}).toList();historyStringList.remove(keyword);final dataString = json.encode(historyStringList);print("历史记录 = $dataString");shareInstance.setString(_searchKey, dataString);return historyStringList;} else {return [];}} catch (e) {return [];}}// 清空搜索历史记录static Future<void> clearSearchHistory() async {final shareInstance = await SharedPreferences.getInstance();try {shareInstance.remove(_searchKey);} catch (e) {print(e);}}
}
  1. 创建删除的提示框:
import 'dart:ffi';
import 'package:flutter/material.dart';class ShowAlertWidget {/// 显示一个带有标题和内容的对话框/// /// 参数:/// - `context`: 当前上下文/// - `title`: 对话框标题/// - `content`: 对话框内容/// /// 返回值:/// - 0: 用户点击了 "取消"/// - 1: 用户点击了 "确定"static Future<int> showAlert(BuildContext context, String title, String content) async {final value = await showDialog<int>(context: context,builder: (BuildContext context) {return AlertDialog(title: Text(title),content: Text(content),actions: [TextButton(onPressed: () {Navigator.pop(context, 0); // 返回值为 0,表示取消},child: Text("取消"),),TextButton(onPressed: () {Navigator.pop(context, 1); // 返回值为 1,表示确定},child: Text("确定"),),],);},) ?? 0; // 如果用户直接关闭对话框,则默认返回 0(取消)print("value = $value");return value;}
}
  1. 使用的地方:

//

  • [ 进入页面的时候,加载数据]

void initState() {super.initState();// 进入页面的时候,加载数据StorageService.getSearchHistoryString().then((list){setState(() {_historySearchData = list;});});}
  • 点击搜索时,将搜索数据存储到本地
      onTap: (){if (_searchTextValue.isEmpty) {return;}// 存储数据StorageService.setSearchHistoryString(_searchTextValue);// 进入商品分类后,点击返回,可以跳过搜索页,直接返回到根视图Navigator.pushReplacementNamed(context, "/productList", arguments: {"keyword": _searchTextValue});}
  • 点击“清空所有历史记录”时,删除本地的搜索记录的数据
		onTap: (){StorageService.clearSearchHistory();setState(() {_historySearchData = [];});}
  • 长按某一条数据时,展示“确认删除”弹框,删除某条数据
				onLongPress: (){ShowAlertWidget.showAlert(context, "删除提醒", "确认要删除这条数据吗").then((value) {if (value == 1) {StorageService.removeSearchKeyword(keyword).then((list){setState(() {_historySearchData = list;});});}});}

完整代码案例

import 'package:fangjd/CommonWidget/ShowAlertWidget.dart';
import 'package:fangjd/Services/ScreenAdapter.dart';
import 'package:fangjd/Services/StorageService.dart';
import 'package:flutter/material.dart';class SearchPage extends StatefulWidget {const SearchPage({super.key});State<SearchPage> createState() => _SearchPageState();
}class _SearchPageState extends State<SearchPage> {final List<String> _hotSearchData = ["超级秒杀", "办公电脑", "儿童汽车", "唇彩唇蜜", "哪吒2"];List<String> _historySearchData = ["贝亲奶瓶", "纸尿裤", "婴儿衣架", "包被"];String _searchTextValue = "";// 设置搜索条Widget _searchInputWidget() {return Container(padding: EdgeInsets.only(left: Screenadapter.width(20)),height: Screenadapter.height(80),decoration: BoxDecoration(color: Color.fromRGBO(233, 233, 233, 0.9),borderRadius: BorderRadius.circular(Screenadapter.height(40)),),child: TextField(autofocus: false,decoration: InputDecoration(// 设置内容的间距contentPadding: EdgeInsets.all(10),// 设置图标prefixIcon: Icon(Icons.search, size: 18, color: Colors.black45),// 设置前置图标的约束prefixIconConstraints: BoxConstraints(//添加内部图标之后,图标和文字会有间距,实现这个方法,不用写任何参数即可解决minWidth: 30.0),// 设置提示文字hintText: "请输入你想搜索的商品",// 设置提示文字的样式hintStyle: TextStyle(fontSize: 16, color: Colors.black45),// 去掉输入框底部的线border: OutlineInputBorder(borderSide: BorderSide.none,),),onChanged: (value) {_searchTextValue = value;},),);}// 设置搜索的按钮Widget _searchItemWiget() {return InkWell(onTap: (){if (_searchTextValue.isEmpty) {return;}// 存储数据StorageService.setSearchHistoryString(_searchTextValue);// 进入商品分类后,点击返回,可以跳过搜索页,直接返回到根视图Navigator.pushReplacementNamed(context, "/productList", arguments: {"keyword": _searchTextValue});},child: Container(padding: EdgeInsets.only(right: Screenadapter.width(30)),height: Screenadapter.height(80),width: Screenadapter.width(100),child: Center(child: Text("搜索", style: TextStyle(fontSize: 18)),),),);}// 热搜的视图Widget _hotSearchWidget() {return SizedBox(height: Screenadapter.height(180),child: Column(mainAxisAlignment: MainAxisAlignment.start,crossAxisAlignment: CrossAxisAlignment.start,children: [Row(children: [SizedBox(width: 10),Text("热搜", style: TextStyle(fontSize: 18, fontWeight: FontWeight.w800))],),SizedBox(height: 10),SingleChildScrollView(padding: EdgeInsets.only(left: 10),scrollDirection: Axis.horizontal,child: Row(children: _hotSearchData.map((value){return InkWell(onTap: (){// 进入商品分类后,点击返回,可以跳过搜索页,直接返回到根视图Navigator.pushReplacementNamed(context, "/productList", arguments: {"keyword": value});},child: Container(height: 30,padding: EdgeInsets.only(left: 10, right: 10),margin: EdgeInsets.only(right: 10),color: Colors.grey[200],child: Center(child: Text(value)),),);}).toList(),),),SizedBox(height: 10),Container(height: 15,color: Colors.grey[200],)],),);}// 历史搜索Widget _historSearchTitleWidget() {return SizedBox(height: 50,child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.center,children: [Expanded(child:  Container(padding: EdgeInsets.only(top: 14, bottom: 14, left: 10),child: Text("历史搜索", style: TextStyle(fontSize: 18, fontWeight: FontWeight.w800), textAlign: TextAlign.start),)),Divider(height: 1, color: Colors.grey[200])],),);}// 搜索页面的内容视图Widget _searchHotAndHistroyWidget() {return ListView.builder(itemBuilder: (context, index){if (index == 0) {return _hotSearchWidget();}if (index == 1) {return _historSearchTitleWidget();}final keyword = _historySearchData[index -2];return Container(padding: EdgeInsets.only(left: 10, right: 10),child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: [InkWell(onTap: (){// 进入商品分类后,点击返回,可以跳过搜索页,直接返回到根视图Navigator.pushReplacementNamed(context, "/productList", arguments: {"keyword": keyword});},onLongPress: (){ShowAlertWidget.showAlert(context, "删除提醒", "确认要删除这条数据吗").then((value) {if (value == 1) {StorageService.removeSearchKeyword(keyword).then((list){setState(() {_historySearchData = list;});});}});},child: Container(width: double.infinity,padding: EdgeInsets.only(top: 14, bottom: 14),child: Text(keyword, style: TextStyle(fontSize: 16), textAlign: TextAlign.start),),),Divider(height: 1, color: Colors.grey[200])],),);},itemCount: _historySearchData.isNotEmpty ? _historySearchData.length + 2 : 1,);}// 删除的按钮Widget _deleteHistoryWiget() {return Container(margin: EdgeInsets.only(left: Screenadapter.width(60), right: Screenadapter.width(60)),height: Screenadapter.height(100),decoration: BoxDecoration(border: Border.all(width: 1,color: Colors.black45),borderRadius: BorderRadius.circular(5)),child: InkWell(onTap: (){StorageService.clearSearchHistory();setState(() {_historySearchData = [];});},child: Row(mainAxisAlignment: MainAxisAlignment.center,children: [Icon(Icons.delete),Text("清空所有历史记录")],),),);}void initState() {super.initState();StorageService.getSearchHistoryString().then((list){setState(() {_historySearchData = list;});});}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: _searchInputWidget(),actions: [_searchItemWiget()],),body: Container(padding: EdgeInsets.only(bottom: 30),child: Column(children: [Expanded(child: _searchHotAndHistroyWidget()),_deleteHistoryWiget()],),),);}
}

文章转载自:

http://SvlNLIxJ.xbxks.cn
http://mrewNLXK.xbxks.cn
http://JSo0235p.xbxks.cn
http://KrE8v7BH.xbxks.cn
http://LP6PgRus.xbxks.cn
http://beYkFrTY.xbxks.cn
http://U7XmcfnR.xbxks.cn
http://ElLByx05.xbxks.cn
http://6duBE2U6.xbxks.cn
http://Kzrvc6xh.xbxks.cn
http://JMMuFDQM.xbxks.cn
http://9yCssxDA.xbxks.cn
http://X2Nv8YAG.xbxks.cn
http://fsUwXAaV.xbxks.cn
http://3tT3PL2k.xbxks.cn
http://cQGjqiEX.xbxks.cn
http://lNUBw1YU.xbxks.cn
http://7eZ2iUkU.xbxks.cn
http://8QlFfMyk.xbxks.cn
http://zTzztFVR.xbxks.cn
http://dTcjl7yu.xbxks.cn
http://ZLhPPa53.xbxks.cn
http://B9cRK7o2.xbxks.cn
http://PTaPdfeD.xbxks.cn
http://oHulKd2c.xbxks.cn
http://mbPgh5Yf.xbxks.cn
http://LbP7zGzw.xbxks.cn
http://vToEDWLt.xbxks.cn
http://Sj8zvzfg.xbxks.cn
http://mgz8sSHy.xbxks.cn
http://www.dtcms.com/wzjs/659650.html

相关文章:

  • 京东网站建设的策划书包装网站建设
  • 郑州的设计公司南昌网站建设方案优化
  • 公司网站后台模板wordpress如何添加链接菜单
  • 用ps做三网站横幅做网站用的国外节点服务器
  • tp框架做的网站建设机械网站机构
  • 盐城网站建设培训手机端网站用dw怎么做
  • 白云区做网站做ppt的图片网站有哪些
  • 厦门网站建设价格xm37图片编辑软件加文字
  • 手机怎么制作网站教程视频教程wordpress添加贴吧表情
  • 数码设计网站做外贸的免费网站有哪些
  • 杭州建设网站 网站建设中企动力是干嘛的
  • 建设网站建设目的意义成都网站建设哪里好点
  • 个人微商城怎么开通百度快照优化排名
  • 网站图片在手机上做多大最清晰深圳谷歌推广公司
  • 大型网站注意哪些公司网站建设推合同
  • 搭建网站的免费程序wordpress整合redis
  • 重庆住房和城乡建设厅官方网站如何做框架网站
  • 北京西站列车时刻表wordpress wmv
  • 无锡网站建设公司排名网站统计分析平台
  • 网站推广工具wordpress发红包插件
  • 许昌网站开发wordpress琪亚娜
  • html5网站源代码下载赚钱软件一天赚100元游戏
  • 云南省建设执业资格注册管理中心网站百度seo排名曝光行者seo
  • vps怎么建多个网站wordpress备份文章
  • 学校网站需求太仓住房城乡建设网站
  • 网站首页设计常见的6种布局方式网络链接推广
  • 在什么网站可以免费建筑模板网
  • 域名备案个人网站名称网站开发成本包括
  • 如何更新网站缓存设立
  • 18岁以上站长统计php 网站共享变量