Dart 如何在颤振镖中向流添加数据

Dart 如何在颤振镖中向流添加数据,dart,stream,flutter,Dart,Stream,Flutter,这里我使用的是列表流我对我的流不太了解。我认为我们可以在flifter中使用流进行分页,因为它加载了数据中的更改。我以为一切都按照预期进行了,直到调试时我调试了它,显示一个异常,说流是在null上调用的,我不知道哪里出错了,也不知道代码是否正确,但代码是用于当用户滚动到末尾时,抓取新列表并将其添加到流中。根据我的错误,我放置了init状态,以确保流不为null,并且它也给了我错误 class _Articles extends StatefulWidget { @override _Articl

这里我使用的是
列表流
我对我的流不太了解。我认为我们可以在flifter中使用流进行分页,因为它加载了数据中的更改。我以为一切都按照预期进行了,直到调试时我调试了它,显示一个异常,说流是在null上调用的,我不知道哪里出错了,也不知道代码是否正确,但代码是用于当用户滚动到末尾时,抓取新列表并将其添加到流中。根据我的错误,我放置了init状态,以确保流不为null,并且它也给了我错误

class _Articles extends StatefulWidget {
@override
_ArticlesState createState() {
return new _ArticlesState();
}
}

class _ArticlesState extends State<_Articles> {
final firestore = Firestore.instance;
ScrollController controller;
StreamController<List<DocumentSnapshot>> list;
String s;

@override
void initState() {
controller = ScrollController()..addListener(_listen);
addlist(); // this is to enure the stream should not be null
super.initState();
  }

  @override
  void dispose() {
    list.close();
    controller.removeListener(_listen);
    super.dispose();
  }

  _listen() { // to check user end of the list or not
    if (controller.offset >= controller.position.maxScrollExtent &&
        !controller.position.outOfRange) {
    listadd(); // if end of the list add to stream
            }
          }

          @override
          Widget build(BuildContext context) {
            var height = MediaQuery.of(context).size.height;
            var width = MediaQuery.of(context).size.width;


            return Container(
              padding: EdgeInsets.only(top: 10, bottom: 10),
              color: Colors.grey[100],
              child: StreamBuilder<List<DocumentSnapshot>>(
                  stream: list.stream,
                  builder: (context, snapshot) {
                    return //some widget like listview builder with data in snapshot
                  }),
            );
          }

          void addlist() async{
            QuerySnapshot list1= await Firestore.instance.collection('articles').limit(3).orderBy('title').getDocuments();
            list.add(list1.documents);
            s= list1.documents[2].data['title'];
          }

      void listadd() async{
        QuerySnapshot li= await Firestore.instance.collection('articles').orderBy('title').limit(3).startAt([s]).getDocuments();
        list.add(li.documents);
        s=li.documents[2].data['title'];
      }
}
class\u文章扩展了StatefulWidget{
@凌驾
_ArticlesState createState(){
返回新的_ArticlesState();
}
}
类_ArticlesState扩展状态{
final firestore=firestore.instance;
滚动控制器;
流量控制器列表;
字符串s;
@凌驾
void initState(){
控制器=ScrollController()…addListener(_listen);
addlist();//这是为了确保流不应为null
super.initState();
}
@凌驾
无效处置(){
list.close();
controller.removeListener(_listen);
super.dispose();
}
_listen(){//检查列表的用户端是否为空
如果(controller.offset>=controller.position.maxScrollExtent&&
!控制器。位置。超出范围){
listadd();//如果列表末尾添加到流中
}
}
@凌驾
小部件构建(构建上下文){
var height=MediaQuery.of(context).size.height;
var width=MediaQuery.of(context).size.width;
返回容器(
填充:仅限边缘设置(顶部:10,底部:10),
颜色:颜色。灰色[100],
孩子:StreamBuilder(
stream:list.stream,
生成器:(上下文,快照){
return//listview builder之类的小部件,快照中有数据
}),
);
}
void addlist()异步{
QuerySnapshot list1=await Firestore.instance.collection('articles').limit(3.orderBy('title').getDocuments();
列表.添加(列表1.文件);
s=list1.文档[2].数据['title'];
}
void listadd()异步{
QuerySnapshot li=wait Firestore.instance.collection('articles').orderBy('title').limit(3).startAt([s]).getDocuments();
列表。添加(li.文件);
s=li.documents[2]。数据['title'];
}
}

以上是我的代码我不知道如何流式传输这只是一个线索和错误,如果代码本身是错误的,请纠正我,任何形式的帮助都非常感谢。

list
似乎没有正确初始化,因为addlist()不是异步运行的,即
addlist()。whenComplete()
。下面的代码片段符合
cloud\u firestore 2.2.0

这里可以做的只是将QuerySnapshot添加为流

child:StreamBuilder(
流:FirebaseFirestore.instance
.收藏(‘物品’)
.orderBy('标题')
.限额(3)
.snapshots(),
生成器:(BuildContext上下文,异步快照){
return//listview builder之类的小部件,快照中有数据
},
),

列表
似乎未正确初始化,因为addlist()未作为异步运行,即
addlist()。whenComplete()
。下面的代码片段符合
cloud\u firestore 2.2.0

这里可以做的只是将QuerySnapshot添加为流

child:StreamBuilder(
流:FirebaseFirestore.instance
.收藏(‘物品’)
.orderBy('标题')
.限额(3)
.snapshots(),
生成器:(BuildContext上下文,异步快照){
return//listview builder之类的小部件,快照中有数据
},
),

看起来
列表
字段从未初始化。尝试用
final list=StreamController()替换当前未初始化的字段声明看起来
列表
字段从未初始化。尝试用
final list=StreamController()替换当前未初始化的字段声明