Flutter 如何在颤振中指定ListTile高度

Flutter 如何在颤振中指定ListTile高度,flutter,listview,flutter-layout,height,flutter-widget,Flutter,Listview,Flutter Layout,Height,Flutter Widget,在这段代码中,我试图在页面的最顶端创建一个按钮或平铺列表,“因为按钮不适合我”。因此,当单击一个时,它会在页面的其余部分返回一个值 问题是这里的磁贴占据了页面的一半以上,这使得它看起来不一致。我想限制瓷砖的高度,我试着把它们放在一排和一个容器中,但没有效果。任何帮助都将不胜感激 运行代码后的结果是: 这是运行代码后出现的错误: 类主页扩展StatefulWidget{ //const主页({Key}):超级(Key:Key); @凌驾 HomePageState createState(){

在这段代码中,我试图在页面的最顶端创建一个按钮或平铺列表,“因为按钮不适合我”。因此,当单击一个时,它会在页面的其余部分返回一个值

问题是这里的磁贴占据了页面的一半以上,这使得它看起来不一致。我想限制瓷砖的高度,我试着把它们放在一排和一个容器中,但没有效果。任何帮助都将不胜感激

运行代码后的结果是:

这是运行代码后出现的错误:

类主页扩展StatefulWidget{
//const主页({Key}):超级(Key:Key);
@凌驾
HomePageState createState(){
返回新的HomePageState();
}
}
类HomePageState扩展了状态{
列表温度=新列表();
列表temp1=['Nile University'、'Smart Village'、'Zewail'];
map1={};
@凌驾
void initState(){
super.initState();
临时职位;
getuser(map1,'1jkpg81yco5pofa2wwr');
}
未来getuser(临时、字符串位置)异步{
列出userid=[];
QuerySnapshot usersubs=等待Firestore.instance.collection('tempSubs').getDocuments();
QuerySnapshot userid=wait Firestore.instance.collection('users')。where('place',isEqualTo:place)。getDocuments();
userid.documents.forEach((DocumentSnapshot文档,){
usersubs.documents.forEach((DocumentSnapshot doc1){
如果(doc.documentID==doc1.documentID){
doc1.数据[“产品”].forEach((k,v){
if(DateTime.fromsimlicondssinceepoch(v.day==DateTime.now().day){
int x=日期时间。从毫秒到新纪元(v)。天;
打印('keey等于$k,v等于$x');
打印('dy是$x');
userids.add(
文档ID);
}
});
}
} ); }  
);
打印('doc.documentID');
打印(用户标识);
setState((){});
返回用户标识;
}
未来getplaces(临时)异步{
QuerySnapshot place=wait Firestore.instance.collection('places').getDocuments();
place.documents.forEach((DocumentSnapshot doc){
临时添加(
文档数据['name']
);
//打印(文档数据['name']);
});
//打印(临时);
setState((){});
返回温度;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
身体:!体温不是空的吗?
CircularProgressIndicator():
行(mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
容器(
高度:100.0,
儿童:
ListView.builder(
滚动方向:轴水平,
项目范围:100.0,
itemCount:临时长度,
itemBuilder:(构建上下文,int索引){
返回ListTile(标题:Text(临时[索引]),onTap:
(){
打印(临时[索引]);
}
);}
),),
容器(子:文本('data'),)
],),
);
}
}

只需删除
扩展的
小部件,以避免填充可用空间,并使用具有固定高度的父容器,与
项目范围
值相同:

    Column(
                  children: <Widget>[
                    Container(
                      height: 100.0,
                      child: ListView.builder(
                          scrollDirection: Axis.horizontal,
                          itemExtent: 100.0,
                          itemCount: temp.length,
                          itemBuilder: (BuildContext context, int index) {
                            return ListTile(
                                title: Text(temp[index]),
                                onTap: () {
                                  print(temp[index]);
                                });
                          }),
                    ),
                    Container(
                      child: Text('data'),
                    )
                  ],
                ),
列(
儿童:[
容器(
高度:100.0,
子项:ListView.builder(
滚动方向:轴水平,
项目范围:100.0,
itemCount:临时长度,
itemBuilder:(构建上下文,int索引){
返回列表块(
标题:文本(临时[索引]),
onTap:(){
打印(临时[索引]);
});
}),
),
容器(
子项:文本(“数据”),
)
],
),

如果需要更多自定义,则应使用容器或填充,而不是ListTile

无法设置高度,但可以通过将稠密属性设置为true来减小高度:

ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemCount: list.length,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text(list[index].name,style: TextStyle(fontSize: 20.0),),
              contentPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 16.0),
              dense:true,                  
            );
          },
        );
列表磁砖:

一个固定高度的行,通常包含一些文本以及 前导或尾随图标

为了便于访问,tappable的前导和尾随窗口小部件必须位于 尺寸至少为48x48。但是,为了遵守材料规范,请 一行ListTiles中的主要窗口小部件在视觉上最多应该是 高度为32(密集:真)或40(密集:假),这可能会冲突 符合可访问性要求

因此,单行ListTile允许前导和后导的高度 要受ListTile高度约束的尾部小部件。这 允许创建可点击的前导和尾随窗口小部件 它们足够大,但是由开发人员来确保 小部件遵循材质规范


在您的
列表视图
属性中添加此
项目范围
项目范围
定义每个子项的大小。这样地⬇️

 ListView.builder(
  scrollDirection: Axis.vertical,
  shrinkWrap: true,
  itemCount: 5,
  itemExtent: 50,
  itemBuilder: (context, index) { 
    return TistTile()
  }
 )
  ListTile(
   title: Text("Tony Stark"),
   subtitle: Text("list[index].name",
        style: TextStyle(fontSize: 14.0),),
   contentPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 
        16.0),
   dense:true,
   );
实现这个
dense:true
,在
listile
属性中,
dense
参数使文本变小并将所有内容打包在一起。这样地⬇️

 ListView.builder(
  scrollDirection: Axis.vertical,
  shrinkWrap: true,
  itemCount: 5,
  itemExtent: 50,
  itemBuilder: (context, index) { 
    return TistTile()
  }
 )
  ListTile(
   title: Text("Tony Stark"),
   subtitle: Text("list[index].name",
        style: TextStyle(fontSize: 14.0),),
   contentPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 
        16.0),
   dense:true,
   );

通过设置
contentPadding
,可以更改内容在左侧和右侧(而不是顶部或底部)的插入量。默认值为
16.0
,但此处我们将设置为
0.0

,因为ListTile中没有高度属性,所以您可以通过将其放置在大小框中来限制互动程序的大小:

          SizedBox(
              height: 32,
              child: ListTile(..))

请仔细分享你的代码,有一些名为
temp
的值我们看不到,而且你的代码有额外的偏执(可能是从类中遗留下来的)。我已经尝试过了,但是