Flutter 使用循环跳过StreamBuilder中的列表项

Flutter 使用循环跳过StreamBuilder中的列表项,flutter,for-loop,Flutter,For Loop,我正在检索具有流的用户列表,需要忽略当前用户。我曾经在将来的列表中这样做过,但在StreamBuilder中,定义文档列表时会出现错误 以下是有效的(未来): Future<List<Users>> _getUsers() async { Firestore db = Firestore.instance; QuerySnapshot querySnapshot = await db .collection('users')

我正在检索具有流的用户列表,需要忽略当前用户。我曾经在将来的列表中这样做过,但在StreamBuilder中,定义文档列表时会出现错误

以下是有效的(未来):

Future<List<Users>> _getUsers() async {
    Firestore db = Firestore.instance;

    QuerySnapshot querySnapshot = await db
        .collection('users')
        .getDocuments();

    List<Users> usersList = [];
    for (DocumentSnapshot item in querySnapshot.documents) {
      var data = item.data;
      if (data["id"] == _userId) continue;

      Users user = Users();
      user.name = data["name"];
      user.username = data["username"];
      user.id = data["id"];

      usersList.add(user);
    }

    return usersList;
  }
startConnecting() {
    return Expanded(
      child: StreamBuilder(
        stream:Firestore.instance.collection('users').snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return Center(
              child: Text(
                "Nothing."
                ),
              ),
            );
          }
          return ListView.builder(
            padding: EdgeInsets.only(top: 10),
            scrollDirection: Axis.vertical,
            itemCount: snapshot.data.documents.length,
            itemBuilder: (context, index) =>
                _buildListUsers(context, snapshot.data.documents[index]),
          );
        },
      ),
    );
  }

Widget _buildListUsers(BuildContext context, DocumentSnapshot document) {
    List<Users> usersList = [];
    for (DocumentSnapshot item in document) {

我查找了这个错误,但没有找到类似的错误。它一定是我缺少的一些简单的东西。

您不必循环查看DocumentSnapshot,因为如上所述,它不是一个iterable对象,而是一个单独的文档。因此,改变这一点:

Widget _buildListUsers(BuildContext context, DocumentSnapshot document) {
    List<Users> usersList = [];
    for (DocumentSnapshot item in document) {

我这样做了,但“item”变得未定义,无法在循环或开关外部使用continue语句,也无法将其更改为:
var data=document.data。你们不再需要物品了,因为并没有for循环,明白了。continue语句是否有其他选项?问题是否已解决?我也无法在您的流生成器中看到continue。您可以始终使用
return
停止进程,而不是使用
uid==uid continue
=>
uid=uid返回
。否。我的意思是这部分
如果(数据[“id”]==\u userId)继续。我希望在生成列表时跳过当前用户,而不是停止进程。有没有一种方法不使用continue就可以做到这一点?不要这样做:
stream:Firestore.instance.collection('users').snapshots()
。仔细阅读有关StreamBuilder的文档的第二段和第三段。它们解释了为什么你正在做的事情被破坏了。
Widget _buildListUsers(BuildContext context, DocumentSnapshot document) {
    List<Users> usersList = [];
    for (DocumentSnapshot item in document) {
Widget _buildListUsers(BuildContext context, DocumentSnapshot document) {
    List<Users> usersList = [];
    //for (DocumentSnapshot item in document) { ==> comment out this for loop
  var data = document.data;
    //keep your logic here as it

    //remove the closing curly brace at the end, because there is no more for loop.
if (data["id"] != _userId) {

      Users user = Users();
      user.name = data["name"];
      user.username = data["username"];
      user.id = data["id"];

      usersList.add(user);
    }