动画儿童大小的Flutter PageView.builder

时间:2019-05-07 21:41:57

标签: dart flutter pageviews

我正在尝试重新创建它: enter image description here 我已经尝试过PageView.builder,并且到此为止(对颜色的丑陋表示抱歉,但这是出于可视化目的):

enter image description here

这是代码:

Container(
    height: 40 * 2 + 100.0,
    child: PageView.builder(

      scrollDirection: Axis.horizontal,
      controller: controller,
      itemCount: 9,
      itemBuilder: (context, index) {
        double value = 1.0;

        try {
          value = controller.hasClients
              ? controller.page - index
              : 1.0;
        } catch (e) {
          value = 1.0;
        }
        value = value.abs().clamp(0.0, 1.0);
        value = 1 - value;

        return Padding(
          padding: EdgeInsets.symmetric(horizontal: 6.0),
          child: Container(
            width: value == 1.0 ? 80.0 : 60.0,
            height: 30.0,
            color: Color.lerp(Colors.green,
                Colors.red, value),
            child: Center(
                child: Text(
                  index.toString(),
                  style: TextStyle(

                      color: Color.lerp(
                          Colors.red, Colors.black, value),
                      fontSize:  lerpDouble(20.0, 40.0, value)),
                )),
          ),
        );
      },

    ))

控制器变量是这样:

controller = new PageController(initialPage: 5, viewportFraction:  1/4);
controller.addListener(() {
  setState(() {});

如您所见,我设法将颜色和textSize更改为“选定”项(红色项),但是即使我尝试将其大小设置为更大,也没有任何效果。我尝试使用ListView.builder设置了不同的大小,但是使用它没有页面捕捉和默认的初始页面,因此我选择退出。

希望一切都清楚。

是否可以这样做,如果可以,我该怎么做?

1 个答案:

答案 0 :(得分:-2)

我知道这是一个老问题,但是您可以通过更改容器的边距来更改宽度和高度。您必须从根本上更改一个容器(位于Padding小部件内的一个容器),以“ value”变量的值作为边距值,此外,我强烈建议使用AnimatedContainer作为开箱即用的动画。将此代码添加到您的容器中:

EdgeInsets.only(bottom: 50, right: value == 1.0? 20 : 40, left: value == 1.0? 20 : 40, top: value == 1.0? 150 : 250),

您还应该从容器中删除以下代码:

width: value == 1.0 ? 80.0 : 60.0,
height: 30.0,