如何在Flatter中的ListView顶部添加标题?

如何在Flatter中的ListView顶部添加标题?,listview,flutter,dart,Listview,Flutter,Dart,我有一个列表视图,在一个容器中滚动,有7个平铺。我想在列表视图顶部添加标题“设置”,即使在列表视图滚动时,该标题也必须保留在列表视图顶部。 当我添加它时,列表正在滚动,但在标题后面。这使得列表视图项很难读取。有没有更好的方法添加此标题 这是我在容器内的listView的代码,具有圆角边缘: Padding( padding: const EdgeInsets.only(top: 408.0, left: 8, right: 8), chil

我有一个列表视图,在一个容器中滚动,有7个平铺。我想在列表视图顶部添加标题“设置”,即使在列表视图滚动时,该标题也必须保留在列表视图顶部。

当我添加它时,列表正在滚动,但在标题后面。这使得列表视图项很难读取。有没有更好的方法添加此标题

这是我在容器内的listView的代码,具有圆角边缘:

  Padding(
            padding: const EdgeInsets.only(top: 408.0, left: 8, right: 8),
            child: Container(
              width: double.infinity,
              height: 590,
              margin: EdgeInsets.only(top: 15),
              decoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.vertical(top: Radius.circular(34)),
              ),
              child: Stack(
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.only(left: 12.0, top: 10),
                    child: ListView.builder(
                      primary: false,
                      scrollDirection: Axis.vertical,
                      shrinkWrap: true,
                      itemCount: 7,
                      itemBuilder: (BuildContext context, int index) {
                        IconData icon;

                        if (index == 0) {
                          icon = Entypo.phone;
                        } else if (index == 1) {
                          icon = Entypo.help;
                        } else if (index == 2) {
                          icon = Entypo.email;
                        } else if (index == 3) {
                          icon = Entypo.star;
                        } else if (index == 4) {
                          icon = Entypo.share;
                        } else if (index == 5) {
                          icon = Entypo.info;
                        } else if (index == 6) {
                          icon = Entypo.log_out;
                        } else if (index == 7) {
                          icon = Entypo.log_out;
                        }

                        return new GestureDetector(
                          behavior: HitTestBehavior.translucent,
                          onTap: () => {_onTileClicked(index)},
                          child: SettingsCard(
                            title: settingsAry[index]['title'],
                            description: settingsAry[index]['description'],
                            index: index,
                            iconData: icon,
                          ),
                        );
                      },
                    ),
                  ),
                  Row(
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.only(top: 10.0, left: 20),
                        child: Text(
                          'Settings',
                          style: TextStyle(
                              fontWeight: FontWeight.bold, fontSize: 23),
                        ),
                      )
                    ],
                  )
                ],
              ),
            ),
          )
填充(
填充:仅限常量边集(顶部:408.0,左侧:8,右侧:8),
子:容器(
宽度:double.infinity,
身高:590,
页边距:仅限边缘集(顶部:15),
装饰:盒子装饰(
颜色:颜色,白色,
边界半径:边界半径。垂直(顶部:半径。圆形(34)),
),
子:堆栈(
儿童:[
填充物(
填充:仅限常量边集(左:12.0,顶部:10),
子项:ListView.builder(
主要:错误,
滚动方向:轴垂直,
收缩膜:对,
物品计数:7,
itemBuilder:(构建上下文,int索引){
Iconda图标;
如果(索引==0){
icon=Entypo.phone;
}else if(索引==1){
icon=Entypo.help;
}else if(索引==2){
icon=Entypo.email;
}否则如果(索引==3){
icon=Entypo.star;
}else if(索引==4){
icon=Entypo.share;
}否则,如果(索引==5){
icon=Entypo.info;
}否则如果(索引==6){
icon=Entypo.log\u out;
}否则如果(索引==7){
icon=Entypo.log\u out;
}
返回新的手势检测器(
行为:HitTestBehavior.transparent,
onTap:()=>{u onTileClicked(index)},
孩子:赛汀斯卡德(
标题:设置[索引][“标题”],
description:settingsAry[索引]['description'],
索引:索引,,
Iconda:图标,
),
);
},
),
),
划船(
儿童:[
填充物(
填充:仅限常量边集(顶部:10.0,左侧:20),
子:文本(
“设置”,
样式:TextStyle(
fontWeight:fontWeight.bold,fontSize:23),
),
)
],
)
],
),
),
)

您需要将它们放在一列中:首先是标题,然后是一个
展开的
,子视图是
列表视图。这应该做到:

  Padding(
            padding: const EdgeInsets.only(top: 408.0, left: 8, right: 8),
            child: Container(
              width: double.infinity,
              height: 590,
              margin: EdgeInsets.only(top: 15),
              decoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.vertical(top: Radius.circular(34)),
              ),
              child: Column(
                children: <Widget>[
                  Row(
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.only(top: 10.0, left: 20),
                        child: Text(
                          'Settings',
                          style: TextStyle(
                              fontWeight: FontWeight.bold, fontSize: 23),
                        ),
                      )
                    ],
                  )
                  Expanded(
                    child: ListView.builder(
                      primary: false,
                      scrollDirection: Axis.vertical,
                      shrinkWrap: true,
                      itemCount: 7,
                      itemBuilder: (BuildContext context, int index) {
                        IconData icon;

                        if (index == 0) {
                          icon = Entypo.phone;
                        } else if (index == 1) {
                          icon = Entypo.help;
                        } else if (index == 2) {
                          icon = Entypo.email;
                        } else if (index == 3) {
                          icon = Entypo.star;
                        } else if (index == 4) {
                          icon = Entypo.share;
                        } else if (index == 5) {
                          icon = Entypo.info;
                        } else if (index == 6) {
                          icon = Entypo.log_out;
                        } else if (index == 7) {
                          icon = Entypo.log_out;
                        }

                        return new GestureDetector(
                          behavior: HitTestBehavior.translucent,
                          onTap: () => {_onTileClicked(index)},
                          child: SettingsCard(
                            title: settingsAry[index]['title'],
                            description: settingsAry[index]['description'],
                            index: index,
                            iconData: icon,
                          ),
                        );
                      },
                    ),
                  ),

                ],
              ),
            ),
          )
填充(
填充:仅限常量边集(顶部:408.0,左侧:8,右侧:8),
子:容器(
宽度:double.infinity,
身高:590,
页边距:仅限边缘集(顶部:15),
装饰:盒子装饰(
颜色:颜色,白色,
边界半径:边界半径。垂直(顶部:半径。圆形(34)),
),
子:列(
儿童:[
划船(
儿童:[
填充物(
填充:仅限常量边集(顶部:10.0,左侧:20),
子:文本(
“设置”,
样式:TextStyle(
fontWeight:fontWeight.bold,fontSize:23),
),
)
],
)
扩大(
子项:ListView.builder(
主要:错误,
滚动方向:轴垂直,
收缩膜:对,
物品计数:7,
itemBuilder:(构建上下文,int索引){
Iconda图标;
如果(索引==0){
icon=Entypo.phone;
}else if(索引==1){
icon=Entypo.help;
}else if(索引==2){
icon=Entypo.email;
}否则如果(索引==3){
icon=Entypo.star;
}else if(索引==4){
icon=Entypo.share;
}否则,如果(索引==5){
icon=Entypo.info;
}否则如果(索引==6){
icon=Entypo.log\u out;
}否则如果(索引==7){
icon=Entypo.log\u out;
}
返回新的手势检测器(
行为:HitTestBehavior.transparent,
onTap:()=>{u onTileClicked(index)},
孩子:赛汀斯卡德(
标题:设置[索引][“标题”],
description:settingsAry[索引]['description'],
索引:索引,,
Iconda:图标,
),