关于Flutter引导页自定义底部指示器
1.先创建个StatefulWidget class WelcomePage extends StatefulWidget { static const routeName = "/welcome"; @override _WelcomePageState createState() => _WelcomePageState(); } class _WelcomePageState extends State { // 默认显示第一张图 int _currentIndex = 0; @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ // 图片播放容器PageView buildPageView(), // 底部指示器 buildIndicator(), // 立即体验按钮 buildEnterButton() ], ), ); }
2.创建PageView来存放图片 Widget buildPageView() { return Positioned.fill( child: PageView.builder( itemCount: 4, // 取消边缘弹簧效果 physics: ClampingScrollPhysics(), // 解决图片之间切换产生的短暂背景显示出来 allowImplicitScrolling: true, itemBuilder: (context, index) { return Image.asset( "assets/images/guideX${index+1}.png", fit: BoxFit.cover, ); }, onPageChanged: (value) { setState(() { _currentIndex = value; }); }, ), ); }
3.底部指示器 + 圆点 Widget buildIndicator() { return Positioned( left: 15, right: 15, bottom: 50, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [0, 1, 2, 3].map((index) { return buildDotView(_currentIndex == index); }).toList() ) ); } // isSelected:用于圆点的宽度 Widget buildDotView(bool isSelected) { return Padding( padding: const EdgeInsets.all(8.0), // 具有动画效果的Container child: AnimatedContainer( width: isSelected ? 40 : 12, height: 12, duration: Duration(milliseconds: 300), decoration: BoxDecoration( color: Color(0xFFf5ca2b), borderRadius: BorderRadius.circular(6) ), ), ); }
4.创建按钮;添加透明度效果 Widget buildEnterButton() { return Positioned( left: 0, right: 0, bottom: 45, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ AnimatedOpacity( opacity: _currentIndex == 3 ? 1 : 0, duration: Duration(milliseconds: 300), child: Container( width: 130, height: 40, child: FlatButton( color: Color(0xFFf5ca2b), shape: OutlineInputBorder( borderRadius: BorderRadius.circular(5), borderSide: BorderSide( width: 0, color: Color(0xFFf5ca2b) ) ), child: Text("立即体验", style: TextStyle( fontSize: 17 )), onPressed: () { print("立即体验"); }, ), ), ) ], ) ); }
推荐6道省时又营养的家常菜,适合一人带娃的宝妈一牛肉炒胡萝卜1。材料胡萝卜牛肉姜葱盐油淀粉料酒2。做法牛肉切成丝,放料酒淀粉盐油抓拌均匀,腌制15分钟。胡萝卜切丝,姜葱切好。起锅烧油,爆香姜葱,把牛肉放锅里翻炒至变色后马上捞出
老话说立秋到,贴秋膘,记得多吃5种美食,滋养身体精神佳今天是秋天的第一个节气立秋,但苦夏却并未因此告一段落。进入立秋之后,暑热与干燥还会持续一段时间,并且秋燥的现象也会慢慢呈现,这种现象就被叫做立秋撞中伏!在这个特殊的节气里,我们要格
不同季节吃不同食物,营养的吸收也是因时而变的,可惜好多人不懂总所周知,一年有四个季节,季节不停的更替。而人类作为四季更替中渺小的一个部分,我们也要学会顺应自然,在不同的时节吃不同的食物,用食补代替药补,从而增强个人的身体健康,提高身体素质。
名不虚传!今夏欧洲两大引援惊艳亮相哈兰德双响,莱万1射2传昨夜今晨,欧洲又进行了多场焦点赛事,在英超首轮曼城对阵西汉姆联的比赛中,今夏转会曼城的哈兰德大发神威,独中两元帮助球队取得开门红在甘伯杯决赛巴萨迎战美洲狮的比赛中,同样夏天转会巴萨
知性优雅衬衫裙衬衫裙集衬衫的简洁利落与连衣裙的优雅温婉为一体。异质拼接不同面料的拼接方式是近几年颇为流行的工艺,轻薄的雪纺面料可以与粗花呢丝绸皮革等多种面料做拼接,打造个性时尚。珠串领边的装饰效
现版本模拟战各种段位的梦魇法刺流玩法的一些心得体会大家好,我是小翡翠,一名模拟战爱好者,也是一名翡翠爱好者。话不多说,看看现在法刺流是多么恶心。上图成功把小编送到王者段位本来想在星耀给大家带来更多实用攻略,无奈哈哈,开玩笑。首先先
名不虚传!今夏欧洲两大引援惊艳亮相哈兰德双响,莱万1射2传昨夜今晨,欧洲又进行了多场焦点赛事,在英超首轮曼城对阵西汉姆联的比赛中,今夏转会曼城的哈兰德大发神威,独中两元帮助球队取得开门红在甘伯杯决赛巴萨迎战美洲狮的比赛中,同样夏天转会巴萨
知性优雅衬衫裙衬衫裙集衬衫的简洁利落与连衣裙的优雅温婉为一体。异质拼接不同面料的拼接方式是近几年颇为流行的工艺,轻薄的雪纺面料可以与粗花呢丝绸皮革等多种面料做拼接,打造个性时尚。珠串领边的装饰效
现版本模拟战各种段位的梦魇法刺流玩法的一些心得体会大家好,我是小翡翠,一名模拟战爱好者,也是一名翡翠爱好者。话不多说,看看现在法刺流是多么恶心。上图成功把小编送到王者段位本来想在星耀给大家带来更多实用攻略,无奈哈哈,开玩笑。首先先
十年后男排能否再登顶戴卿尧记者李铭珅摄如果可以,我想为国家队多出一份力。来自上海的中国男排边攻手戴卿尧说。今晚,中国男排在泰国佛统迎来亚洲杯的首个对手中国台北队。以赛代练,为世锦赛练兵,是这支中国男排
U牌是什么引起内分泌失调,会给皮肤带来哪些问题?在脸上长痘时我们经常会听到一句话,内分泌失调,为什么会内分泌失调,内分泌失调会给肌肤带来哪些问题呢?我们的身体有一套完整的内分泌系统,只要其中的一部分或整体出现功能不平衡,就会被称