具有不同小部件和列表项的 Flutter ListView

use*_*956 4 listview widget scrollable flutter

我不确定我是否遗漏了什么。我正在玩 Flutter,我想用一些文本小部件、按钮和其他小部件(见下图)构建一个(简单)视图。这些小部件后面应该有一个项目列表。整个视图(当然除了应用栏)应该是可滚动的——不仅仅是项目。

这就是为什么我把所有东西都放在一个 ListView 中。但我不能做这样的事情(虽然items是一个带有字符串值的地图):

...    
home: Scaffold(
  appBar: AppBar(
    title: Text('App bar'),
  ),
  body: new ListView(
    children: <Widget>[
      new Text('Some Text'),
      new FlatButton(...),
      new Image.asset(...),
      items.map((item)=>new Padding(
        child: new Text(item.title),
      )).toList()
    ],
  ),
),
...
Run Code Online (Sandbox Code Playgroud)

获得所需视图的正确方法是什么?

提前致谢!

具有不同小部件类型和一些列表项的 ListView

Blo*_*oss 6

你可以这样使用

 ListView(
     shrinkWrap: true,
     children: <Widget>[
          Text('hi'),//first widget
          Text('hi2'),//second widget
          Flex(
              direction: Axis.horizontal,children: <Widget>[
                      Expanded(
                        child: ListView.builder(
                            shrinkWrap: true,
                            itemCount: 3,
                            itemBuilder: (BuildContext context, int index){
                              return ...
Run Code Online (Sandbox Code Playgroud)

或者 只是调整计数和索引。

 ListView.builder(
      itemCount: get.length + 2, // add room for the two extra
      itemBuilder: (BuildContext context, int index) {
        if(index == 0){
         return Text('Custom any widget');
        }
        if(index == 1){
         return Text('Custom any widget');
        }
        index -= 2; // decrement index so that it's now in the range [0..length]
        return Bubble(
            style: styleSomebody,
            child: Container(
              ... 
            ));
      }),
Run Code Online (Sandbox Code Playgroud)


Pab*_*era 5

您可以使用ListView.builder更高效的方法,因为只有在滚动到屏幕上时才会创建项目。在第一个位置,您可以放置​​不在列表中的小部件,如下所示:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: Text('App bar')),
    body: ListView.builder(
      itemCount: items.length + 1,
      itemBuilder: (context, index) {
        if (index == 0) {
          return Column(
            children: <Widget>[
              Text('Some Text'),
              FlatButton(child: Text('A flat button'), onPressed: () {}),
              Image.asset("An image"),
            ],
          );
        }
        return Text('Item ${items[index].title}');
      },
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)


Rub*_*elo -2

ListView 中的子项是 iten 列表,因此,如果您想显示按钮或文本,您的小部件树是:

Scaffold
 appBar: AppBar
 body:  Container
   child: ListView       
            ListItem
            ListItem
            ListItem
Run Code Online (Sandbox Code Playgroud)

然后,在您的情况下,您可以使用列来显示“固定小部件”(文本、按钮)+可滚动列表视图:

Scaffold
 appBar: AppBar
 body:  Column 
     [
        Text,
        Buttom,
        ListView
          ListItem
          ListItem
          ListItem
     ]
Run Code Online (Sandbox Code Playgroud)