Flutter 颤振小部件旋转木马而不仅仅是图像旋转木马?

Flutter 颤振小部件旋转木马而不仅仅是图像旋转木马?,flutter,flutter-packages,Flutter,Flutter Packages,我需要为项目列表(比如学生)实现一个carousel视图。我想能够显示个人资料图像,名称和等级(3项)在每个转盘。到目前为止,我只找到像这样的图像的旋转木马: 是否有任何软件包允许我为每张幻灯片放置多个小部件(例如:图像、文本、文本) 您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。我编写了一个带有点导航和箭头控件的自定义小部件。也许它会有用 import 'package:flutter

我需要为项目列表(比如学生)实现一个carousel视图。我想能够显示个人资料图像,名称和等级(3项)在每个转盘。到目前为止,我只找到像这样的图像的旋转木马:


是否有任何软件包允许我为每张幻灯片放置多个小部件(例如:图像、文本、文本)

您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。

您可以试用旋转木马滑块包()。我在一个需要创建小部件旋转木马的项目中使用了它。

我编写了一个带有点导航和箭头控件的自定义小部件。也许它会有用

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,