如何解决我如何为带有 json 文件的 listview.Builder 添加搜索栏?
在我的应用程序 Flutter 中,我有一个带有这个主体的小部件
body: ListView.builder(
itemCount: data.length,itemBuilder: (BuildContext context,int index) {
return Column(
children: <Widget>[
ListTile(
title: Text(data[index]['name']),leading: Icon(Icons.arrow_forward_ios),onTap: () => {
Navigator.pushNamed(context,data[index]['routes'])
// Your Logout method
},//title: Text(data[index]['name']),)
],);
},),
变量数据依赖于本地 json 文件。 json文件是这样的:
[
{
"name" : "name","routes" : "/routes1"
},{
"name" : "name2","routes" : "/routes2"
},]
对于更新 json 文件,我使用此代码
Future<String> loadJsonData() async {
var jsonText =
await rootBundle.loadString('assets/file.json');
setState(() {
data = json.decode(jsonText);
});
print(jsonText);
}
@override
// ignore: must_call_super
void initState() {
this.loadJsonData();
}
使用此代码,我有一个列表,可以让我看到名称并通过“路由”将我发送到另一个页面。
我需要添加一个搜索栏,它允许我在键入名称时仅显示相似的名称。 例如,如果 json 文件中的列表名称是: 马丁 麦克风 詹姆斯
当我开始输入“M”时,我会看到一个列表 马丁 迈克。
有什么建议吗?
谢谢
解决方法
因为列表是本地的,不会改变。可以使用一个简单的有状态小部件来实现搜索。
最简单的方法是在状态中为过滤器名称添加一个变量,并根据搜索文本使用过滤器名称设置状态。这里我使用了一个字符串项,请使用适合您需要的类。
function binanceOrderBook() {
try {
muteHttpExceptions = true;
var workSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var mySheet = workSpreadsheet.getSheetByName('Order Books');
if(mySheet == 'Sheet'){
mySheet.activate();
} else {
mySheet = workSpreadsheet.insertSheet('Order Books',1).activate();
}
var ui = SpreadsheetApp.getUi();
var string = 'https://api.binance.com/api/v3/depth?';
var symbolResponse = ui.prompt('Pair Name','Please enter the pair symbol.\n\nExamples: BTCUSDT or ETHBTC:',ui.ButtonSet.OK_CANCEL);
var symbolButton = symbolResponse.getSelectedButton();
if(symbolButton == ui.Button.CANCEL){return}
var mySymbol = symbolResponse.getResponseText();
mySymbol = mySymbol.toUpperCase();
string = string + "symbol=" + mySymbol;
var limitResponse = ui.prompt('Limit:','Please enter Limit (Period Quantity).\nValid limits are:5,10,20,50,100,500,1000. \n Default limit is 100.\n You can leave it blank and simply click OK.',ui.ButtonSet.OK_CANCEL);
if(limitResponse.getSelectedButton() == ui.Button.CANCEL){return}
var myLimit = Number(limitResponse.getResponseText());
if(myLimit != 5 && myLimit != 10 && myLimit != 20 && myLimit != 50 && myLimit != 100 && myLimit != 500 && myLimit != 1000){myLimit = 100;}
string = string + "&limit=" + myLimit;
var myDate = new Date().toUTCString();
var jsonOrderBookData = JSON.parse(UrlFetchApp.fetch('https://api.binance.com/api/v3/depth?symbol=' + mySymbol + '&limit=' + myLimit));
reporter(jsonOrderBookData);
} catch (e){
exceptionHandler(e)
}
}
变量包含所有名称。
allNames
变量包含所有名称。
searchedNames
函数 setState 和 searchedName 基于在 _searchChanged
中输入的测试
TextField
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。