Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振-将未来列表传递给SearchDelegate_Dart_Flutter_Aqueduct - Fatal编程技术网

Dart 颤振-将未来列表传递给SearchDelegate

Dart 颤振-将未来列表传递给SearchDelegate,dart,flutter,aqueduct,Dart,Flutter,Aqueduct,我一直在关注一个关于颤振搜索的教程- . 我一直在尝试使用一个列表来实现相同的功能,该列表是从未来的列表中派生出来的,其中数据来自api(在本例中是和Aqueduct服务器) 目前,我的屏幕列出了api中的所有联系人,我现在想根据该联系人列表进行搜索。我假设将相同的列表(已经显示)传递给搜索代理是最佳实践。不幸的是,我不知道如何做到这一点 我的代码如下所示(请注意,我已经为这个示例精简了一些代码): 提前感谢。基本上,您必须将FutureBuilder进一步向上移动到小部件层次结构中,因此搜索框

我一直在关注一个关于颤振搜索的教程- . 我一直在尝试使用一个列表来实现相同的功能,该列表是从未来的列表中派生出来的,其中数据来自api(在本例中是和Aqueduct服务器)

目前,我的屏幕列出了api中的所有联系人,我现在想根据该联系人列表进行搜索。我假设将相同的列表(已经显示)传递给搜索代理是最佳实践。不幸的是,我不知道如何做到这一点

我的代码如下所示(请注意,我已经为这个示例精简了一些代码):


提前感谢。

基本上,您必须将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. */),
          ),
        );
      }
  );
}