type'int'不是'String'类型的子类型-Flutter Android

问题描述 投票:0回答:1

我的应用昨天运行良好,并且在“时间轴”页面上正确显示了帖子。但是现在,今天当我再次按项目打开并想继续处理它时,当我运行调试应用程序时,它在“时间轴”页面上生成了一个错误,提示“类型int不是字符串类型的子类型”。这是我的Timeline.dart文件:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:fluttershare/models/user.dart';
import 'package:fluttershare/pages/home.dart';
import 'package:fluttershare/pages/search.dart';
import 'package:fluttershare/widgets/header.dart';
import 'package:fluttershare/widgets/post.dart';
import 'package:fluttershare/widgets/progress.dart';

class Timeline extends StatefulWidget {
  final User currentUser;

  Timeline({this.currentUser});

  @override
  _TimelineState createState() => _TimelineState();
}

class _TimelineState extends State<Timeline> {
  List<Post> posts;
  List<String> followingList = [];

  // @override
  // void initState() {
  //   super.initState();
  //   getTimeline().whenComplete(() {
  //     setState(() {});
  //   });
  //   getFollowing();
  // }

  Future<void> getTimeline() async {
    QuerySnapshot snapshot = await timelineRef
        .document(widget.currentUser.id)
        .collection('timelinePosts')
        .orderBy('timestamp', descending: true)
        .getDocuments();

    List<Post> posts =
        snapshot.documents.map((doc) => Post.fromDocument(doc)).toList();
    setState(() {
      this.posts = posts;
    });
  }

  getFollowing() async {
    QuerySnapshot snapshot = await followingRef
        .document(currentUser.id)
        .collection('userFollowing')
        .getDocuments();

    setState(() {
      followingList = snapshot.documents.map((doc) => doc.documentID).toList();
    });
  }

  buildTimeline() {
    if (posts == null) {
      return circularProgress();
    } else if (posts.isEmpty) {
      return buildUsersToFollow();
    } else {
      return ListView.builder(
          itemCount: posts.length,
          itemBuilder: (BuildContext ctxt, int index) {
            return Text(posts[index].toString());
          });
    }
  }

  buildUsersToFollow() {
    return StreamBuilder(
      stream:
          usersRef.orderBy('timestamp', descending: true).limit(30).snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return circularProgress();
        }
        List<UserResult> userResults = [];
        snapshot.data.documents.forEach((doc) {
          User user = User.fromDocument(doc);
          final bool isAuthUser = currentUser.id == user.id;
          final bool isFollowingUser = followingList.contains(user.id);
          if (isAuthUser) {
            return;
          } else if (isFollowingUser) {
            return;
          } else {
            UserResult userResult = UserResult(user);
            userResults.add(userResult);
          }
        });
        return Container(
          color: Theme.of(context).accentColor.withOpacity(0.2),
          child: Column(
            children: <Widget>[
              Container(
                padding: EdgeInsets.all(12.0),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Icon(
                      Icons.person_add,
                      color: Theme.of(context).primaryColor,
                      size: 30.0,
                    ),
                    SizedBox(
                      width: 8.0,
                    ),
                    Text(
                      "Users to Follow",
                      style: TextStyle(
                        color: Theme.of(context).primaryColor,
                        fontSize: 30.0,
                      ),
                    ),
                  ],
                ),
              ),
              Column(children: userResults),
            ],
          ),
        );
      },
    );
  }

  @override
  Widget build(context) {
    return Scaffold(
      appBar: header(context, isAppTitle: true),
      body: RefreshIndicator(
          onRefresh: () => getTimeline(),
          child: FutureBuilder(
              future: timelineRef
                  .document(widget.currentUser.id)
                  .collection('timelinePosts')
                  // .orderBy('timestamp', descending: true)
                  .getDocuments(),
              builder: (context, snapshot) {
                if (snapshot.hasData &&
                    snapshot.connectionState != ConnectionState.waiting) {
                  print("${widget.currentUser.id}");
                  print("${snapshot.data.documents.length}");

                  var posts = snapshot.data.documents
                      .map((doc) => Post.fromDocument(doc))
                      .toList();
                  if (posts.length > 0)
                    return ListView.builder(
                        itemCount: posts.length,
                        itemBuilder: (context, index) {
                          // posts[index] gives you the post item.

                          return posts[index];
                        });
                  // else
                  // return


                } else
                  return CircularProgressIndicator();
              })),
    );
  }
}

调试控制台:This is the log of debug console

flutter dart
1个回答
0
投票

setState(() { followingList = snapshot.documents.map((doc) => doc.documentID).toList(); });

执行此操作

setState(() { followingList = snapshot.documents.map((doc) => doc.documentID).toList().toString(); });

© www.soinside.com 2019 - 2024. All rights reserved.