Flutter:如何将StreamBuilder与ListView.separated一起使用

时间:2019-11-13 14:31:10

标签: listview flutter dart stream stream-builder

我想要一个带有Stream中项目的ListView。 当然,列表的内容应反映出流中的变化。 并且由于我的设计师的怪癖,我希望列表中的项目由分隔符分隔。

想知道,创建带有分隔符的ListView并对Stream的变化做出反应的正确方法是什么。

body: StreamBuilder(
        stream: someStream,
        builder: (ctx, snapshot) {
          return ListView.separated(
            separatorBuilder: (context, index) => Divider(color: Colors.black),
            itemCount: ***whatsHere***?,
            itemBuilder: (BuildContext ctx, int index) {
...

希望,我错过了一些事情。 由于流的异步性质,因此以某种方式获得源流长度的想法看起来至少很奇怪。 StatefullWidget带有流订阅(和setState调用)似乎是可行的, 但是StreamBuilder的发明完全一样,不是吗?

3 个答案:

答案 0 :(得分:1)

您的IgnoreNew应该是元素列表,以便您可以像这样访问列表的snapshot

length

我建议也将body: StreamBuilder( stream: someStream, initialData: [], builder: (ctx, snapshot) { return ListView.separated( separatorBuilder: (context, index) => Divider(color: Colors.black), itemCount: snapshot.data.length, itemBuilder: (BuildContext ctx, int index) { final element = snapshot.data[index]; 添加到StreamBuilder中,以免在快照中使用空值。

希望有帮助

答案 1 :(得分:1)

qqnorm(NormalFit) 可以具有不同的状态。

通常,您可以执行以下操作:

LogNormalFit <- fitdistr(obs, densfun="log-normal") 

要获得更多控制权,您可以检查snapshot,它们可以是if (!snapshot.hasError){ //return error message } if (!snapshot.hasData){ //return a loader } //else you have data List<your items> = snapshot.data; // do your thing with ListView.builder snapshot.connectionsStatenonedone

您可以找到更多here for the AsyncSnapshot classhere for a quick tutorial

答案 2 :(得分:0)

尝试这种希望对您有用的

    body: StreamBuilder(
            stream: someStream,
            builder: (ctx, snapshot) {
              return ListView.separated(
                separatorBuilder: (context, index) => Divider(color: Colors.black),
                itemCount: snapshot.data.lenght,
                itemBuilder: (BuildContext ctx, int index) {
    final titre= snapshot.data[index].title ;  // for example

return ListTile ( title : Text(titre)) ;  
     //....