Flutter 颤振小部件旋转木马而不仅仅是图像旋转木马?
我需要为项目列表(比如学生)实现一个carousel视图。我想能够显示个人资料图像,名称和等级(3项)在每个转盘。到目前为止,我只找到像这样的图像的旋转木马:Flutter 颤振小部件旋转木马而不仅仅是图像旋转木马?,flutter,flutter-packages,Flutter,Flutter Packages,我需要为项目列表(比如学生)实现一个carousel视图。我想能够显示个人资料图像,名称和等级(3项)在每个转盘。到目前为止,我只找到像这样的图像的旋转木马: 是否有任何软件包允许我为每张幻灯片放置多个小部件(例如:图像、文本、文本) 您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。我编写了一个带有点导航和箭头控件的自定义小部件。也许它会有用 import 'package:flutter
是否有任何软件包允许我为每张幻灯片放置多个小部件(例如:图像、文本、文本) 您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。我编写了一个带有点导航和箭头控件的自定义小部件。也许它会有用
import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';
class CustomImageSlider extends StatefulWidget {
List<Widget> images;
CustomImageSlider({@required this.images});
@override
_CustomImageSliderState createState() => _CustomImageSliderState();
}
class _CustomImageSliderState extends State<CustomImageSlider> {
CarouselController buttonCarouselController;
int _currentImage = 0;
@override
void initState() {
buttonCarouselController = CarouselController();
super.initState();
}
@override
Widget build(BuildContext context) {
double height = MediaQuery.of(context).size.height/3;
List<Widget> dotNavigation = [];
for (var image in widget.images){
int index=widget.images.indexOf(image);
dotNavigation.add(
GestureDetector(
child: Container(
width: _currentImage == index ? 12.0 : 8.0,
height: _currentImage == index ? 12.0 : 8.0,
margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 5.0),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _currentImage == index
? Theme.of(context).primaryColor
: Color.fromRGBO(0, 0, 0, 0.4)),
),
onTap: () {
buttonCarouselController.jumpToPage(index);
},
)
);
}
return Container(
child: Column(
children: [
Stack(
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 30.0),
child: CarouselSlider(
carouselController: buttonCarouselController,
items: widget.images,
options: CarouselOptions(
height: height,
//aspectRatio: 16/9,
viewportFraction: 1,
initialPage: 0,
enableInfiniteScroll: true,
reverse: false,
// autoPlay: true,
// autoPlayInterval: Duration(seconds: 3),
// autoPlayAnimationDuration: Duration(milliseconds: 800),
// autoPlayCurve: Curves.fastOutSlowIn,
scrollDirection: Axis.horizontal,
onPageChanged: (currentIndex, reason) {
setState(() {
_currentImage = currentIndex;
});
}
),
),
),
Positioned(
top: height/2,
right: -18,
child: IconButton(
onPressed: () => buttonCarouselController.nextPage(
duration: Duration(milliseconds: 300), curve: Curves.linear),
icon: Icon(Icons.keyboard_arrow_right),
iconSize: 50.0,
color: Theme.of(context).primaryColor,
),
),
Positioned(
top: height/2,
left: -18,
child: IconButton(
onPressed: () => buttonCarouselController.previousPage(
duration: Duration(milliseconds: 300), curve: Curves.linear),
icon: Icon(Icons.chevron_left),
iconSize: 50.0,
color: Theme.of(context).primaryColor,
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: dotNavigation,
),
]
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:carousel_slider/carousel_slider.dart”;
类CustomImageSlider扩展StatefulWidget{
列出图像;
CustomImageSlider({@required this.images});
@凌驾
_CustomImageSliderState createState()=>_CustomImageSliderState();
}
类_CustomImageSliderState扩展状态{
转盘控制器按钮转盘控制器;
int _currentImage=0;
@凌驾
void initState(){
buttonCarouselController=旋转木马控制器();
super.initState();
}
@凌驾
小部件构建(构建上下文){
double height=MediaQuery.of(context).size.height/3;
列表点导航=[];
for(widget.images中的var图像){
int index=widget.images.indexOf(图像);
dotNavigation.add(
手势检测器(
子:容器(
宽度:_currentImage==索引?12.0:8.0,
高度:_currentImage==索引?12.0:8.0,
边缘:边缘组。对称(垂直:10.0,水平:5.0),
装饰:盒子装饰(
形状:BoxShape.circle,
颜色:_currentImage==索引
主题(上下文)原色
:Color.fromRGBO(0,0,0,0.4)),
),
onTap:(){
按钮RouselController.jumpToPage(索引);
},
)
);
}
返回容器(
子:列(
儿童:[
堆叠(
儿童:[
容器(
填充:边缘组。对称(垂直:10.0,水平:30.0),
儿童:旋转滑翔机(
转盘控制器:按钮转盘控制器,
项目:widget.images,
选项:旋转木马(
高度:高度,,
//专题:16/9,
视口分数:1,
初始页:0,
启用无限滚动:正确,
反面:错,
//自动播放:对,
//自动播放间隔:持续时间(秒数:3),
//autoPlayAnimationDuration:持续时间(毫秒:800),
//自动播放曲线:Curves.FastOutSwowin,
滚动方向:轴水平,
onPageChanged:(当前索引,原因){
设置状态(){
_currentImage=currentIndex;
});
}
),
),
),
定位(
顶部:高度/2,
右:-18,
孩子:我的钮扣(
按下:()=>ButtonCaruelController.nextPage(
持续时间:持续时间(毫秒:300),曲线:曲线。线性),
图标:图标(图标。键盘箭头右键),
iconSize:50.0,
颜色:主题。背景。原色,
),
),
定位(
顶部:高度/2,
左:-18,
孩子:我的钮扣(
按下:()=>ButtonCaruelController.previousPage(
持续时间:持续时间(毫秒:300),曲线:曲线。线性),
图标:图标(图标。V形左),
iconSize:50.0,
颜色:主题。背景。原色,
),
),
],
),
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:dotNavigation,
),
]
),
);
}
}
我编写了一个带有点导航和箭头控件的自定义小部件。也许它会有用
import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';
class CustomImageSlider extends StatefulWidget {
List<Widget> images;
CustomImageSlider({@required this.images});
@override
_CustomImageSliderState createState() => _CustomImageSliderState();
}
class _CustomImageSliderState extends State<CustomImageSlider> {
CarouselController buttonCarouselController;
int _currentImage = 0;
@override
void initState() {
buttonCarouselController = CarouselController();
super.initState();
}
@override
Widget build(BuildContext context) {
double height = MediaQuery.of(context).size.height/3;
List<Widget> dotNavigation = [];
for (var image in widget.images){
int index=widget.images.indexOf(image);
dotNavigation.add(
GestureDetector(
child: Container(
width: _currentImage == index ? 12.0 : 8.0,
height: _currentImage == index ? 12.0 : 8.0,
margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 5.0),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _currentImage == index
? Theme.of(context).primaryColor
: Color.fromRGBO(0, 0, 0, 0.4)),
),
onTap: () {
buttonCarouselController.jumpToPage(index);
},
)
);
}
return Container(
child: Column(
children: [
Stack(
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 30.0),
child: CarouselSlider(
carouselController: buttonCarouselController,
items: widget.images,
options: CarouselOptions(
height: height,
//aspectRatio: 16/9,
viewportFraction: 1,
initialPage: 0,
enableInfiniteScroll: true,
reverse: false,
// autoPlay: true,
// autoPlayInterval: Duration(seconds: 3),
// autoPlayAnimationDuration: Duration(milliseconds: 800),
// autoPlayCurve: Curves.fastOutSlowIn,
scrollDirection: Axis.horizontal,
onPageChanged: (currentIndex, reason) {
setState(() {
_currentImage = currentIndex;
});
}
),
),
),
Positioned(
top: height/2,
right: -18,
child: IconButton(
onPressed: () => buttonCarouselController.nextPage(
duration: Duration(milliseconds: 300), curve: Curves.linear),
icon: Icon(Icons.keyboard_arrow_right),
iconSize: 50.0,
color: Theme.of(context).primaryColor,
),
),
Positioned(
top: height/2,
left: -18,
child: IconButton(
onPressed: () => buttonCarouselController.previousPage(
duration: Duration(milliseconds: 300), curve: Curves.linear),
icon: Icon(Icons.chevron_left),
iconSize: 50.0,
color: Theme.of(context).primaryColor,
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: dotNavigation,
),
]
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:carousel_slider/carousel_slider.dart”;
类CustomImageSlider扩展StatefulWidget{
列出图像;
CustomImageSlider({@required this.images});
@凌驾
_CustomImageSliderState createState()=>_CustomImageSliderState();
}
类_CustomImageSliderState扩展状态{
转盘控制器按钮转盘控制器;
int _currentImage=0;
@凌驾
void initState(){
buttonCarouselController=旋转木马控制器();
super.initState();
}
@凌驾
小部件构建(构建上下文){
double height=MediaQuery.of(context).size.height/3;
列表点导航=[];
for(widget.images中的var图像){
int index=widget.images.indexOf(图像);
dotNavigation.add(
手势检测器(
子:容器(
宽度:_currentImage==索引?12.0:8.0,
高度:_currentImage==索引?12.0:8.0,
边缘:边缘组。对称(垂直:10.0,水平:5.0),
装饰:盒子装饰(
形状:BoxShape.circle,