单卡不单

Single card is not single

我正在尝试让 post 像 Twitter 上的那样,其中每个 post 都是一个单独的项目,但它们都像一张大卡片,没有分开。我是 Flutter 的新手,不擅长解释,但我希望你明白了。

 @override
  Widget build(BuildContext context) {
    return Scaffold(
        floatingActionButton: FloatingActionButton(
          onPressed: _writePost,
          tooltip: 'Increment',
          child: Icon(Icons.create, color: Colors.grey[300]),
        ),
        body: SizedBox(
          height: 500, 
          child:
              StreamBuilder<List<Post>>(
            initialData: const [],
            stream: _socketStream.stream,
            builder: (context, snapshot) {
              if (_isLoading) {
                return const Center(
                  child: CircularProgressIndicator(),
                );
              }
              return Card(child: ListView(
                scrollDirection: Axis.vertical,
                shrinkWrap: true,
                children: [
                  ...snapshot.data!.map<Widget>(
                    (post) => Padding(
                      key: ValueKey(post.id),
                      padding: const EdgeInsets.symmetric(vertical: 10),
                      child: ListTile(
                        title: Text(
                          post.content,
                          style: const TextStyle(fontSize: 20),
                        ),
                        trailing: MaterialButton(
                          onPressed: () {
                            _deletePost(post.id);
                          },
                          child: const Icon(
                            Icons.delete,
                            size: 30,
                          ),
                        ),
                      ),
                    ),
                  )
                ],
               ) );
            },
          ),
        ));
  }

外观示例:

我试图找出文档中的错误,但是... 如果您需要更多代码或解释,请写信。 如果可以,请帮助我<3

您需要使用 Card 而不是父项 ListView 添加数据的每个映射项。像这样:

return ListView(
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            children: [
              ...snapshot.data!.map<Widget>(
                (post) => Padding(
                  key: ValueKey(post.id),
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child:
                   // Use card here.
                   Card(child: ListTile(
                    title: Text(
                      post.content,
                      style: const TextStyle(fontSize: 20),
                    ),
                    trailing: MaterialButton(
                      onPressed: () {
                        _deletePost(post.id);
                      },
                      child: const Icon(
                        Icons.delete,
                        size: 30,
                      ),
                    ),
                  ),
                 ),
                ),
              )
            ],
            );

你可以试试ListView.separated

尝试:

List.generate(lentgh, (index) {
    return Text("$index"); // custom widget
          }),