flutter scrollView не прокручивается в потоке - PullRequest
1 голос
/ 21 июня 2020

Я работаю над проектом Flutter, который использует Firebase и имеет StreamBuilder, который создает карточку, похожую на приложение для блога. Всякий раз, когда я добавляю много «блогов», я получаю нижнюю ошибку переполнения, и когда я помещаю body: MemoirsList(), в SingleChildScrollView, приложение не позволяет мне прокручивать вниз.

Вот код для MemoirsList ():

  Widget MemoirsList() {
    return Container(
      child: memoirsStream != null
          ? ListView(
            shrinkWrap: true,
              children: <Widget>[
                StreamBuilder(
                  stream: memoirsStream,
                  builder: (context, snapshot) {
                    return ListView.builder(
                        padding: EdgeInsets.symmetric(horizontal: 16),
                        itemCount: snapshot.data.documents.length,
                        shrinkWrap: true,
                        itemBuilder: (context, index) {
                          return MemoirsCard(
                            authorName: snapshot.data.documents[index].data['authorName'],
                            title: snapshot.data.documents[index].data["title"],
                            description: snapshot.data.documents[index].data['description'],
                            imgUrl: snapshot.data.documents[index].data['imgURL'],
                          );
                        });
                  },
                )
              ],
            )
          : Container(
              alignment: Alignment.center,
              child: CircularProgressIndicator(),
          ),
    );
  }

Код для MemoirsCard ():

class MemoirsCard extends StatelessWidget {

  String imgUrl, title, description, authorName;
  MemoirsCard({@required this.imgUrl, @required this.title, @required this.description, @required this.authorName});

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.only(bottom: 20),
      height: 200,
      child: Stack(
        children: <Widget>[
          ClipRRect(
            borderRadius: BorderRadius.circular(10), 
            child: Image.network(
              imgUrl, 
              width: MediaQuery.of(context).size.width,
              fit: BoxFit.cover
            )
          ),
          Container(
            height: 200,
            decoration: BoxDecoration(
              color: Colors.black54.withOpacity(0.3),
              borderRadius: BorderRadius.circular(10),
            ),
          ),
          Container(
            width: MediaQuery.of(context).size.width,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                Text(
                  title,
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: 32,
                    fontWeight: FontWeight.w700
                  ),
                ),
                SizedBox(height: 8),
                Text(
                  description,
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: 15,
                    fontWeight: FontWeight.w400
                  )
                ),
              ],
            ),
          ),
        ],
      )
    );
  }
}

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Listview.Builder внутри Listview, это не лучший вариант, который предлагает вам флаттер

Просто замените верхний Listview на Column

Измените код следующим образом

SingleChildScrollView(
                child: Column(
                  children: <Widget>[
                    ListView.builder(
                        shrinkWrap: true,
                        physics: NeverScrollableScrollPhysics(),
                        ...
0 голосов
/ 29 июня 2020

Вот последний код для всех, кому интересно:

  Widget MemoirsList() {
    return SingleChildScrollView(
      child: memoirsStream != null
          ? Column(
              children: <Widget>[
                StreamBuilder(
                  stream: memoirsStream,
                  builder: (context, snapshot) {
                    if(snapshot.data == null) return CircularProgressIndicator(); //Removes called documents on null error
                    return ListView.builder(
                        padding: EdgeInsets.symmetric(horizontal: 16),
                        itemCount: snapshot.data.documents.length,
                        shrinkWrap: true,
                        physics: NeverScrollableScrollPhysics(),
                        itemBuilder: (context, index) {
                          return MemoirsCard(
                            authorName: snapshot.data.documents[index].data['authorName'],
                            title: snapshot.data.documents[index].data["title"],
                            description: snapshot.data.documents[index].data['description'],
                            imgUrl: snapshot.data.documents[index].data['imgURL'],
                          );
                        });
                  },
                )
              ],
            )
          : Container(
              alignment: Alignment.center,
              child: CircularProgressIndicator(),
          ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...