Flutter 集装箱尺寸不小于';无法在pageView.builder中更改

Flutter 集装箱尺寸不小于';无法在pageView.builder中更改,flutter,Flutter,这是我代码的结果 我在PageViewwidget中使用了四个图像 由于一些图片的大小不同于另一张图片,我想通过boxfit调整图片的大小。但对于boxfit来说,图片的高度太长了 所以我用height属性限制了容器,但不管我如何在makePage小部件中设置容器的高度,(例如,100,height/8…) 容器高度固定(绿色容器) 这是因为viewportFraction吗?有人知道这是什么原因吗 _makePage小部件返回PageView的每个页面(图像) import 'package:

这是我代码的结果

我在
PageView
widget中使用了四个图像 由于一些图片的大小不同于另一张图片,我想通过boxfit调整图片的大小。但对于boxfit来说,图片的高度太长了

所以我用height属性限制了
容器
,但不管我如何在makePage小部件中设置容器的高度,(例如,100,height/8…) 容器高度固定(绿色容器)

这是因为viewportFraction吗?有人知道这是什么原因吗

_makePage小部件返回PageView的每个页面(图像)

import 'package:flutter/material.dart';
import 'package:dots_indicator/dots_indicator.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(body: DotIndicator()),
    );
  }
}

class DotIndicator extends StatefulWidget {
  @override
  _DotIndicatorState createState() => _DotIndicatorState();
}

class _DotIndicatorState extends State<DotIndicator> {
  final List<String> imgEx = [
    'images/1.jpg',
    'images/2.jpg',
    'images/3.jpg',
    'images/4.jpg',
  ];

  //pageView controller
  final _controller = PageController(viewportFraction: 0.8);
  double currentPage = 0.0;

  @override
  Widget build(BuildContext context) {
    return _showMenuPage(context); 
  }

  Widget _showMenuPage(BuildContext context) {
    final _itemCount = imgEx.length;

    return Container(
      height: MediaQuery.of(context).size.height / 2,
      color: Colors.grey[300],
      child: Stack(
        children: [
          PageView.builder(
            controller: _controller,
            itemCount: _itemCount, 
            itemBuilder: (context, itemIndex) {
              return _makePage(context, itemIndex); 
            },
          )
        ],
      ),
    );
  }

  Widget _makePage(BuildContext context, int itemIndex) {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 4.0),
      child: Container(
        height: MediaQuery.of(context).size.height /4,
        width: MediaQuery.of(context).size.width * 0.8,
        color: Colors.green,
        child: Image.asset(imgEx[itemIndex], ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“包装:圆点指示器/圆点指示器.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主页:脚手架(主体:DotIndicator()),
);
}
}
类DotIndicator扩展StatefulWidget{
@凌驾
_DotIndicatorState createState()=>\u DotIndicatorState();
}
类_DotIndicatorState扩展状态{
最终列表imgEx=[
“images/1.jpg”,
‘images/2.jpg’,
“images/3.jpg”,
“images/4.jpg”,
];
//页面浏览控制器
最终_controller=PageController(视口分数:0.8);
双currentPage=0.0;
@凌驾
小部件构建(构建上下文){
返回显示页面(上下文);
}
Widget\u showMenuPage(构建上下文){
最终_itemCount=imgEx.length;
返回容器(
高度:MediaQuery.of(context).size.height/2,
颜色:颜色。灰色[300],
子:堆栈(
儿童:[
PageView.builder(
控制器:_控制器,
itemCount:\u itemCount,
itemBuilder:(上下文,itemIndex){
返回_makePage(上下文,itemIndex);
},
)
],
),
);
}
Widget\u makePage(BuildContext上下文,int itemIndex){
返回填充(
填充:常量边集。对称(水平:4.0),
子:容器(
高度:MediaQuery.of(context).size.height/4,
宽度:MediaQuery.of(context).size.width*0.8,
颜色:颜色。绿色,
子项:Image.asset(imgEx[itemIndex],),
),
);
}
}

您需要将图像放入绿色
容器的
框装饰

Widget _makePage(BuildContext context, int itemIndex) {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 4.0),
      child: Container(
        height: MediaQuery.of(context).size.height /4,
        width: MediaQuery.of(context).size.width * 0.8,
        decoration: BoxDecoration(
          color: Colors.green,
          image: DecorationImage(
            image: AssetImage(imgEx[itemIndex]),
            fit: BoxFit.cover
          )
        )
      ),
    );
  }
可以将宽度和高度放置在容器的约束中:

child: Container(
  constraints: BoxConstraints(
            maxHeight: MediaQuery.of(context).size.height /4,
            maxWidth: MediaQuery.of(context).size.width * 0.8,
          ),
...

问题是只需根据您的需要更改高度和宽度

Widget _showMenuPage(BuildContext context) {
    final _itemCount = imgEx.length;

    return Container(
       height: MediaQuery.of(context).size.height / 3,
       width: MediaQuery.of(context).size.width * 0.8,
      color: Colors.grey[300],
      child: Stack(
        children: [
          PageView.builder(
            pageSnapping: false,
            controller: _controller,
            itemCount: _itemCount,
            itemBuilder: (context, itemIndex) {
              return _makePage(context, itemIndex);
            },
          )
        ],
      ),
    );
我仍然不明白为什么容器大小不随高度或框约束而改变,但我通过添加更多Padding-EdgeInsets.symmetric(水平:20.0,垂直:70)得到了结果


那么你想减少绿色容器?或者增加图像的高度?哦,我想减少绿色容器。很抱歉,当我尝试这个解决方案时,容器的大小仍然是一样的。。(长)是否在
BoxConstraints
中设置了
maxHeight
@kw3136
Widget _makePage(BuildContext context, int itemIndex) {
return Padding(
  padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 70),
  child: Container(
    decoration: BoxDecoration(
      color: Colors.green,
      image: DecorationImage(
          image: AssetImage(imgEx[itemIndex]),fit: BoxFit.cover)),
  ),
);}