我有一个包含在StreamBuilder中的刷新指标。每当StreamBuilder添加了新数据时,刷新指标都会重建其Listview。建筑商在这个过程中跳到了顶端。
StreamBuilder(stream: apiResultStream.stream,Builder:(BuildContext上下文,AsyncSnapshot快照){if(snapshot.has错误){print(有错误);}if(!snapshot.has数据){
return RefreshIndicator(
onRefresh: () {
_apiResult=[];
return _loadMoreData(0);
},
child:snapshot.data.length == 0 ? Padding(
padding: const EdgeInsets.all(20.0),
child: Center(child: Text('No items', style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold),)),
):SingleChildScrollView(
controller: scrollController,
physics: const AlwaysScrollableScrollPhysics(),
child:ListView.builder(
itemBuilder:(BuildContext ctxt, int index){
return InkWell(
child:TripItem(key: ValueKey(snapshot.data[index].Id),item:snapshot.data[index])
);
}
,itemCount:snapshot.data.length,
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
key: UniqueKey(),
))
);
解决方案是将GlobalKey添加到刷新指标。当StreamBuilder有新数据时,这将阻止ReresIndex重建其子级。
StreamBuilder(
stream: apiResultStream.stream,
builder:
(BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if(snapshot.hasError){
print("has error");
}
if(!snapshot.hasData)
{
return RefreshIndicator(
key: _refreshIndicatorKey ,
onRefresh: () {
_apiResult=[];
return _loadMoreData(0);
},
child:snapshot.data.length == 0 ? Padding(
padding: const EdgeInsets.all(20.0),
child: Center(child: Text('No items', style:
TextStyle(fontSize: 16.0, fontWeight:
FontWeight.bold),)),
):SingleChildScrollView(
controller: scrollController,
physics: const AlwaysScrollableScrollPhysics(),
child:ListView.builder(
itemBuilder:(BuildContext ctxt, int index){
return InkWell(
child:TripItem(key:
ValueKey(snapshot.data[index].Id),item:snapshot.data[index])
);
}
,itemCount:snapshot.data.length,
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
key: UniqueKey(),
))
);
现在我在streambuilder中使用bloc模式,当我刷新父窗口小部件时,我可以看到请求此行两次。(我的意思是构建方法被请求两次)我怎么能只生成一个?我看到了,他们说使用instance或initstate,但对于bloc模式,我认为使用initstate是不可能的,const value不适用于
问题内容: 我正在做一个项目。它只是显示任务列表并向其中添加新任务。我有3个班级。一种用于添加,一种用于查看,一种用于保存所有信息(或者我认为)。 我的列表中已经有2个任务,它们显示正确。 问题是,当我 添加 新任务时,它不会在视图中显示。我尝试了许多可能的解决方案: 只需将项目添加到列表 创建一个新列表,其中包含旧列表中的项目并重建适配器; 使用沿着与附加()命令; 等等 这是我的代码,有点混乱
问题内容: 我想在运行时按下按钮时向JFrame中添加一些新组件。到目前为止,该方法仍然有效,但是我必须手动调整窗口大小才能看到新组件。 有什么我可以触发的动作或可以调用的方法来刷新窗口吗?任何帮助表示赞赏。提前致谢。 问题答案: 你必须去框架。如果这样不起作用,您还必须致电
添加firestore依赖项后构建失败,错误如下:这只发生在添加firestore依赖项后,当我删除它时,应用程序构建得很好。 失败:生成失败,出现异常。 梯度包装属性: 和我的颤振依赖:
我是Flutter的新手,面临着StreamBuilder的问题 我在点击卡片列表中可用的按钮(应用按钮)时进行网络呼叫,基于显示的其他按钮。 我面临的问题是,小部件不更新成功的网络调用后,但当我刷新页面我得到更新的结果。 我做错了什么? 我没有在这方面使用任何状态。我需要用它吗? //下面是我如何将数据添加到流中的 预期结果:当我进行网络呼叫时,如果成功,那么根据网络结果,其他按钮必须显示在相应
我已经尝试了这些链接,但是,我的问题没有解决。 可以阻止Eclipse创建其他appcompat_v7项目吗?附加-appcompat-v7-项目/22726069#22726069 可以阻止Eclipse创建额外的appcompat_v7项目吗?