首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter:具有不同高度约束的水平ListView视图

Flutter:具有不同高度约束的水平ListView视图
EN

Stack Overflow用户
提问于 2020-12-23 14:05:22
回答 3查看 149关注 0票数 0

我有一个固定高度为100的水平列表栏(在列中使用)。身高100对于iPhone8来说是很好的。但在iPhone-X中,由于高度限制为100,像素溢出。如果我加到140,两个都很好。但是这个酒吧在iphone8看起来不太好。所以我希望一个设备的高度为120,另一个设备的高度为140。我想我可以使用ConstrainedBox来实现它,如下所示:

代码语言:javascript
复制
ConstrainedBox(constraints: BoxConstraints(minHeight: 100, maxHeight: 140), child: ListView(...))

但是listview总是使用140的高度。那么如何实现不同设备的动态高度约束呢?

示例小部件:

代码语言:javascript
复制
class MyHorizontalBar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 100, // 140
      child: ListView(
        scrollDirection: Axis.horizontal,
        children: [
          _myCard(),
          _myCard(),
          _myCard(),
        ],
      ),
    );
  }

  Widget _myCard(){
    return Container(
      width: 115,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text('Top', style: TextStyle(fontSize: 12)),
          Text('Middle', style: TextStyle(fontSize: 25)),
          Text('Bottom', style: TextStyle(fontSize: 18)),
        ],
      ),
    );
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-23 14:27:15

尝试使用MediaQuery.of(上下文)、.size.height或width代替固定的高度和宽度。

票数 1
EN

Stack Overflow用户

发布于 2020-12-23 14:49:04

您可以使用LayoutBuilder小部件。但这类问题通常是通过flexible layout解决的。

例如,将您的单杠高度定义为可用高度的1/3。

票数 0
EN

Stack Overflow用户

发布于 2020-12-23 16:16:04

使用MediaQuery.of(上下文)

尝试以下代码。

代码语言:javascript
复制
class MyHorizontalBar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    double magicNumber = 5; // Try playing with this number to get the appearence. 
    return SizedBox(
      height: MediaQuery.of(context).size.height / magicNumber, 
      child: ListView(
        scrollDirection: Axis.horizontal,
        children: [
          _myCard(),
          _myCard(),
          _myCard(),
        ],
      ),
    );
  }

  Widget _myCard() {
    return Container(
      width: 115,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
              Text('Top', style: TextStyle(fontSize: 12)),
              Text('Middle', style: TextStyle(fontSize: 25)),
              Text('Bottom', style: TextStyle(fontSize: 18)),
            ],
          ),
        );
      }
    }

尝试使用变量magicNumber。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65419754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档