Dart 颤振-将未来列表传递给SearchDelegate
我一直在关注一个关于颤振搜索的教程- . 我一直在尝试使用一个列表来实现相同的功能,该列表是从未来的列表中派生出来的,其中数据来自api(在本例中是和Aqueduct服务器) 目前,我的屏幕列出了api中的所有联系人,我现在想根据该联系人列表进行搜索。我假设将相同的列表(已经显示)传递给搜索代理是最佳实践。不幸的是,我不知道如何做到这一点 我的代码如下所示(请注意,我已经为这个示例精简了一些代码):Dart 颤振-将未来列表传递给SearchDelegate,dart,flutter,aqueduct,Dart,Flutter,Aqueduct,我一直在关注一个关于颤振搜索的教程- . 我一直在尝试使用一个列表来实现相同的功能,该列表是从未来的列表中派生出来的,其中数据来自api(在本例中是和Aqueduct服务器) 目前,我的屏幕列出了api中的所有联系人,我现在想根据该联系人列表进行搜索。我假设将相同的列表(已经显示)传递给搜索代理是最佳实践。不幸的是,我不知道如何做到这一点 我的代码如下所示(请注意,我已经为这个示例精简了一些代码): 提前感谢。基本上,您必须将FutureBuilder进一步向上移动到小部件层次结构中,因此搜索框
提前感谢。基本上,您必须将FutureBuilder进一步向上移动到小部件层次结构中,因此搜索框和正文都位于其下方。然后,您只需将数据推入ContactSearch即可 例如:
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Contact>>(
future: readContacts(),
builder: (context, snapshot) {
return Scaffold(
appBar: AppBar(
title: Text('List Contacts'),
actions: [
IconButton(
icon: Icon(Icons.search),
tooltip: 'Search',
onPressed: !snapshot.hasData ? null : () {
showSearch(
context: context,
delegate: ContactSearch(snapshot.data),
);
}
),
],
),
body: Container(
child:
(snapshot.hasData ?
//Code which displays the data (works fine);
: /* show errors/progress/etc. */),
),
);
}
);
}
@覆盖
小部件构建(构建上下文){
回归未来建设者(
future:readContacts(),
生成器:(上下文,快照){
返回脚手架(
appBar:appBar(
标题:文本(“联系人列表”),
行动:[
图标按钮(
图标:图标(Icons.search),
工具提示:“搜索”,
onPressed:!snapshot.hasData?null:(){
showSearch(
上下文:上下文,
代表:ContactSearch(快照数据),
);
}
),
],
),
主体:容器(
儿童:
(snapshot.hasData?
//显示数据的代码(工作正常);
:/*显示错误/进度/etc.*),
),
);
}
);
}
在futurebuilder中包装脚手架似乎不是一个好主意,因为如果快照没有数据,它只会显示一个黑屏,我想这对用户来说是不好的。@SwapnilNakade你在说什么?正如您在示例中所看到的。。您必须处理snapshot.hasData
,并显示一个有用的进度对话框或错误(snapshot.hasError
),直到加载所有内容。
showSearch(
context: context,
delegate: ContactSearch(),
);
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Contact>>(
future: readContacts(),
builder: (context, snapshot) {
return Scaffold(
appBar: AppBar(
title: Text('List Contacts'),
actions: [
IconButton(
icon: Icon(Icons.search),
tooltip: 'Search',
onPressed: !snapshot.hasData ? null : () {
showSearch(
context: context,
delegate: ContactSearch(snapshot.data),
);
}
),
],
),
body: Container(
child:
(snapshot.hasData ?
//Code which displays the data (works fine);
: /* show errors/progress/etc. */),
),
);
}
);
}