flutter bug

flutter 中explaned布局有可能会出现重复刷新swiper组件,

//Coded  by fsy on 2021/7/1
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';

class SelData extends StatefulWidget {
  const SelData({Key key}) : super(key: key);

  @override
  _SelDataState createState() => _SelDataState();
}

class _SelDataState extends State<SelData> {
  DateTime dateTime = DateTime.now();
  List year =[];
  int _selYearIndex = 0;

  int _selMonthIndex = 0;
  int _selDayIndex = 0;
  List monthDays = [31,29,31,30,31,30,31,31,30,31,30,31];
  SwiperController _monthController = SwiperController();
  int getDays(int fYear,int month){
    //闰年
    if(fYear%400==0||(fYear%4==0&&fYear%100!=0)){
      monthDays[1] = 29;
    }else{
      monthDays[1] = 28;

    }
    return monthDays[month];
  }

  @override
  void initState() {
    Future.delayed(const Duration(milliseconds: 100),(){
      _monthController.move(dateTime.month-1,animation: false);
    });


    super.initState();
  }

  @override
  void dispose() {
    _monthController.dispose();
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return Material(
      type: MaterialType.transparency,
      child: Center(
        child: Container(
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
              color: Colors.white, borderRadius: BorderRadius.circular(12)),
          height: 400,
          width: MediaQuery.of(context).size.width - 70,
          child: Column(
            children: [
              Container(
                alignment: Alignment.topLeft,
                child: Text('开始日期'),
              ),
              Container(
                height: 150,
                width: MediaQuery.of(context).size.width - 120,
                child: Container(
                    child: Row(
                  children: [

                    //年
                    Expanded(
                        flex: 2,
                        child: Container(
                          child: Swiper(
                            onTap: (e){
                              print('你点击了我');
                            },
                            onIndexChanged: (index) {
                              _selYearIndex = index;

                              print(_selYearIndex);

                              setState(() {

                              });
                            },
                            scrollDirection: Axis.vertical,
                            scale: 0.5,
                            viewportFraction: 0.35,
                            itemCount: 20,
                            itemBuilder: (BuildContext context, int index) {
                              return Container(
                                decoration: BoxDecoration(
                                    color: _selYearIndex == index
                                        ? Color(0xFFF7F7F7)
                                        : Colors.white,
                                    borderRadius: BorderRadius.horizontal(
                                        left: Radius.circular(8))),
                                alignment: Alignment.center,
                                child: Text('${dateTime.year + index}年'),
                              );
                            },
                          ),
                        )),
                    //月
                    Expanded(
                        flex: 2,
                        child: Container(
                          child: Swiper(
                            controller: _monthController,
                            onTap: (e){
                              print(getDays(_selYearIndex+dateTime.year, _selMonthIndex+1));
                            },
                            onIndexChanged: (index) {
                              _selMonthIndex = index;
                              print(getDays(_selYearIndex+dateTime.year, _selMonthIndex));
                              setState(() {});
                            },
                            scrollDirection: Axis.vertical,
                            scale: 0.5,
                            viewportFraction: 0.35,
                            itemCount: 12,
                            itemBuilder: (BuildContext context, int index) {
                              return Container(
                                color: _selMonthIndex == index
                                    ? Color(0xFFF7F7F7)
                                    : Colors.white,
                                alignment: Alignment.center,
                                child: Text('${index+1}月')
                              );
                            },
                          ),
                        )),

                    //日
                    Expanded(
                        flex: 2,
                        child: Container(
                          child: Swiper(
                            onIndexChanged: (index) {
                              _selDayIndex = index;
                              setState(() {});
                            },
                            scrollDirection: Axis.vertical,
                            scale: 0.5,
                            viewportFraction: 0.35,
                            itemCount: getDays(_selYearIndex+dateTime.year, _selMonthIndex),
                            // itemCount: getDays(2012,12),
                            itemBuilder: (BuildContext context, int index) {
                              return Container(
                                decoration: BoxDecoration(
                                  color: _selDayIndex == index
                                      ? Color(0xFFF7F7F7)
                                      : Colors.white,
                                  borderRadius: BorderRadius.horizontal(right: Radius.circular(8))
                                ),
                                alignment: Alignment.center,
                                child: Text('${index+1}日')
                              );
                            },
                          ),
                        )),
                  ],
                )),
              ),

              ElevatedButton(
                  onPressed: (){
                    print( getDays(205, 1));

                  }, child: Text('点击'))
            ],
          ),
        ),
      ),
    );
  }
}

去掉flex好啦,但是不知道原因,以后有时间了解决

          //Coded  by fsy on 2021/7/1
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';

class SelData extends StatefulWidget {
  const SelData({Key key}) : super(key: key);

  @override
  _SelDataState createState() => _SelDataState();
}

class _SelDataState extends State<SelData> {
  DateTime dateTime = DateTime.now();
  List year =[];
  int _selYearIndex = 0;

  int _selMonthIndex = 0;
  int _selDayIndex = 0;
  List monthDays = [31,29,31,30,31,30,31,31,30,31,30,31];
  SwiperController _monthController = SwiperController();
  int getDays(int fYear,int month){
    //闰年
    if(fYear%400==0||(fYear%4==0&&fYear%100!=0)){
      monthDays[1] = 29;
    }else{
      monthDays[1] = 28;

    }
    return monthDays[month];
  }

  @override
  void initState() {
    Future.delayed(const Duration(milliseconds: 100),(){
      _monthController.move(dateTime.month-1,animation: false);
    });


    super.initState();
  }

  @override
  void dispose() {
    _monthController.dispose();
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return Material(
      type: MaterialType.transparency,
      child: Center(
        child: Container(
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
              color: Colors.white, borderRadius: BorderRadius.circular(12)),
          height: 400,
          width: MediaQuery.of(context).size.width - 70,
          child:Column(
            children: [
              Container(
                alignment: Alignment.topLeft,
                child: Text('开始日期'),
              ),
              Container(
                height: 150,
                width: MediaQuery.of(context).size.width - 120,
                child: Container(
                    child: Row(
                      children: [

                        //年
                        Container(
                          height: 300,
                          width: 80,
                          child: Swiper(
                            onTap: (e){
                              print('你点击了我');
                            },
                            onIndexChanged: (index) {
                              _selYearIndex = index;
                              print(_selYearIndex);
                              setState(() {
                              });
                            },
                            scrollDirection: Axis.vertical,
                            scale: 0.5,
                            viewportFraction: 0.35,
                            itemCount: 20,
                            itemBuilder: (BuildContext context, int index) {
                              return Container(
                                decoration: BoxDecoration(
                                    color: _selYearIndex == index
                                        ? Color(0xFFF7F7F7)
                                        : Colors.white,
                                    borderRadius: BorderRadius.horizontal(
                                        left: Radius.circular(8))),
                                alignment: Alignment.center,
                                child: Text('${dateTime.year + index}年'),
                              );
                            },
                          ),
                        ),

                        //月
                        Container(
                          height: 300,
                          width: 80,
                          child: Swiper(
                            controller: _monthController,
                            onTap: (e){
                              print(getDays(_selYearIndex+dateTime.year, _selMonthIndex+1));
                            },
                            onIndexChanged: (index) {
                              _selMonthIndex = index;
                              print(getDays(_selYearIndex+dateTime.year, _selMonthIndex));
                              setState(() {});
                            },
                            scrollDirection: Axis.vertical,
                            scale: 0.5,
                            viewportFraction: 0.35,
                            itemCount: 12,
                            itemBuilder: (BuildContext context, int index) {
                              return Container(
                                  color: _selMonthIndex == index
                                      ? Color(0xFFF7F7F7)
                                      : Colors.white,
                                  alignment: Alignment.center,
                                  child: Text('${index+1}月')
                              );
                            },
                          ),
                        ),

                        //日
                        Container(
                          height: 300,
                          width: 80,
                          child: Swiper(
                            onIndexChanged: (index) {
                              _selDayIndex = index;
                              setState(() {});
                            },
                            scrollDirection: Axis.vertical,
                            scale: 0.5,
                            viewportFraction: 0.35,
                            // itemCount: 5,
                            itemCount: getDays(_selYearIndex+dateTime.year, _selMonthIndex),
                            itemBuilder: (BuildContext context, int index) {
                              return Container(
                                  decoration: BoxDecoration(
                                      color: _selDayIndex == index
                                          ? Color(0xFFF7F7F7)
                                          : Colors.white,
                                      borderRadius: BorderRadius.horizontal(right: Radius.circular(8))
                                  ),
                                  alignment: Alignment.center,
                                  child: Text('${index+1}')
                              );
                            },
                          ),
                        )

                      ],
                    )),
              ),

            ],
          ),


        ),
      ),
    );
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值