Flutter:carousel_slider 横向轮播图、垂直轮播公告栏实现

ops/2025/1/23 13:27:11/

安装依赖

carousel_slider: ^5.0.0

1、垂直滚动公告栏

在这里插入图片描述

import 'package:carousel_slider/carousel_options.dart';// 垂直滚动公告栏Widget _buildNotice() {return <Widget>[<Widget>[TDImage(assetUrl: "assets/img/home11.png",width: 60.w,height: 60.w,),SizedBox(width: 20.w,),// 可垂直滚动的公告内容SizedBox(width: 490.w,height: 80.w,child: CarouselSlider(items: controller.notices.map((notice) {return TextWidget.body(notice,size: 24.sp,maxLines: 1,overflow: TextOverflow.ellipsis,);}).toList(),options: CarouselOptions(scrollDirection: Axis.vertical,  // 垂直方向滚动height: 80.w,  // 设置高度为文字高度viewportFraction: 1.0,  // 每个item占满整个viewportautoPlay: true,  // 自动播放autoPlayInterval: const Duration(seconds: 3),  // 播放间隔autoPlayAnimationDuration: const Duration(milliseconds: 800),  // 动画时长autoPlayCurve: Curves.easeInOut,  // 动画曲线pauseAutoPlayOnTouch: true,  // 触摸时暂停自动播放enableInfiniteScroll: true,  // 无限滚动),),),SizedBox(width: 40.w,),TDImage(assetUrl: "assets/img/home12.png",width: 28.w,height: 28.w,).onTap(()=>Get.toNamed('/notice_list_page')),].toRow(mainAxisAlignment: MainAxisAlignment.start).paddingHorizontal(20.w).card(color: const Color(0xffFFF9ED)).tight(width: 690.w,height: 80.w)].toRow().card(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))).height(80.w);}final List<String> notices = ['这是第一条公告信息','这是第二条公告信息','这是第三条公告信息',];

2、横向轮播图

在这里插入图片描述

  // 横向轮播图Widget _buildBanner() {return <Widget>[SizedBox(width: 750.w,height: 750.w,child: CarouselSlider(items: [TDImage(assetUrl: 'assets/img/goods.jpg',width: 750.w,height: 750.w,type: TDImageType.square,),TDImage(assetUrl: 'assets/img/goods.jpg',width: 750.w,height: 750.w,type: TDImageType.square,),TDImage(assetUrl: 'assets/img/goods.jpg',width: 750.w,height: 750.w,type: TDImageType.square,),],options: CarouselOptions(scrollDirection: Axis.horizontal,  // 垂直方向滚动height: 750.w,  // 设置高度为文字高度viewportFraction: 1.0,  // 每个item占满整个viewportautoPlay: true,  // 自动播放autoPlayInterval: const Duration(seconds: 3),  // 播放间隔autoPlayAnimationDuration: const Duration(milliseconds: 800),  // 动画时长autoPlayCurve: Curves.easeInOut,  // 动画曲线pauseAutoPlayOnTouch: true,  // 触摸时暂停自动播放enableInfiniteScroll: true,  // 无限滚动onPageChanged: controller.onPageChanged,),),),SliderIndicatorWidget(length: 3, currentIndex: controller.currentIndex,color: AppTheme.colorfff,).positioned(bottom: 30.w,left: 0,right: 0,),].toStack().height(750.w);}// 页码int currentIndex = 0;// 切换页码void onPageChanged(int index, CarouselPageChangedReason reason) {currentIndex = index;update(["goods_detail"]);}

SliderIndicatorWidget 页码组件

import 'package:chenyanzhenxuan/common/index.dart';
import 'package:flutter/material.dart';/// slider indicator 指示器
class SliderIndicatorWidget extends StatelessWidget {/// 个数final int length;/// 当前位置final int currentIndex;/// 颜色final Color? color;/// 是否原型final bool isCircle;/// 对齐方式final MainAxisAlignment alignment;const SliderIndicatorWidget({super.key,required this.length,required this.currentIndex,this.color,this.isCircle = false,this.alignment = MainAxisAlignment.center,});@overrideWidget build(BuildContext context) {Color boxColor = color ?? AppTheme.error;return Row(mainAxisAlignment: alignment,// 采用 list.generate 方式生成 item 项children: List.generate(length, (index) {return Container(margin: const EdgeInsets.symmetric(horizontal: 3),// 圆型宽度 6 , 否则当前位置 15 , 其他位置 8width: !isCircle? currentIndex == index? 15.0: 8: 6,// 圆型高度 6 , 否则 4height: !isCircle ? 4 : 6,decoration: BoxDecoration(// 圆角 4borderRadius: const BorderRadius.all(Radius.circular(4)),// 非当前位置透明度 0.3color: currentIndex == index ? boxColor : boxColor.withOpacity(0.3),),);}),);}
}

http://www.ppmy.cn/ops/152478.html

相关文章

安卓程序作为web服务端的技术实现:AndServer 实现登录权限拦截

AndServer官方地址&#xff1a;入门 GitBook 1.在安卓项目的两个build.grade中添加相关依赖&#xff1a; 2.目录结构&#xff1a; 以我写的顺序去进行理解&#xff1a; 首先创建一个server的管理类&#xff1a;进行初始化&#xff0c;启动&#xff0c;停止操作等 import and…

MyBatis最佳实践:参数详解

第一章&#xff1a;MyBatis 参数详解 parameterType&#xff1a; 简单数据类型&#xff1a; int double String Long 简单的写法&#xff1a; Java.lang.Integer > int、Int、integer、Integer 都可以&#xff0c;框架提供简写的方式 POJO(JavaBean 实体类)&#xff1a;对…

win暂停更新设置

暂停更新 Windows Registry Editor Version5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings] "FlightSettingsMaxPauseDays"dword:00001b58 "PauseFeatureUpdatesStartTime""2023-07-07T10:00:52Z" "PauseFeatureU…

【玩转全栈】----Django模板的继承

先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01; 目录 模板继承的好处 模板继承的语法规则 更新代码 上文中的部门管理页面&#xff1a; 【玩转全栈】----Django制作部门管理页面-CSDN博客 大家会发现&#xff0c;由于定义了多个html文件&#xff0c;多个ht…

EF Core 乐观、悲观并发控制

目录 并发控制的概念 悲观并发控制 实现 问题 乐观并发控制 实现 RowVersion 实体类及配置 概念 总结 并发控制的概念 并发控制&#xff1a;避免多个用户同时操作资源造成的并发冲突问题。举例&#xff1a;统计点击量。最好的解决方案&#xff1a;非数据库解决方案。…

IJCAI-2024 | 具身导航的花样Prompts!VLN-MP:利用多模态Prompts增强视觉语言导航能力

作者&#xff1a; Haodong Hong1,2 , Sen Wang1∗ , Zi Huang1 , Qi Wu3 and Jiajun Liu2,1 单位&#xff1a;昆士兰大学&#xff0c;澳大利亚科学与工业研究组织&#xff0c;阿德莱德大学 论文标题&#xff1a;Why Only Text: Empowering Vision-and-Language Navigation wi…

maven常见知识点

1、maven是什么&#xff1f; maven是Java的包管理工具&#xff0c;因为java包太多了&#xff0c;使用工具统一管理。 2、引入同一个包时使用哪个&#xff1f; 会遵循 路径最短优先 和 声明顺序优先 两大原则。解决这个问题的过程也被称为 Maven 依赖调解。 3、什么是 POM&…

Netty搭建websocket服务器,postman可以连接,浏览器无法连接

简介&#xff1a;Netty搭建websocket服务器&#xff0c;postman可以连接&#xff0c;浏览器无法连接&#xff0c;很奇怪&#xff0c;不知道为什么。最后更换端口解决问题&#xff0c;原来端口时6666&#xff0c;把6666改成其他端口就可以了。 过程&#xff1a; 前端代码 后端…