Flutter 如何在颤振中制作圆弧(曲线)旋转木马(ListVie,Row小部件)?

Flutter 如何在颤振中制作圆弧(曲线)旋转木马(ListVie,Row小部件)?,flutter,carousel,curve,swiper,flutter-animation,Flutter,Carousel,Curve,Swiper,Flutter Animation,我想有一个旋转木马/滑水器/行元素(图像/图标)跟随曲线路径(圆弧),我想滚动曲线路径中的元素而不是直线路径中的元素,如果你有任何想法,请分享。 您可以查看下面链接中的示例: 是的,你可以检查一下,我使用了PageView: 例: class\u MyHomePageState扩展状态{ 页面控制器(PageController)= PageController(初始页:0,视口分数:0.2); int pageChangedIndex=0; @凌驾 小部件构建(构建上下文){ //TODO

我想有一个旋转木马/滑水器/行元素(图像/图标)跟随曲线路径(圆弧),我想滚动曲线路径中的元素而不是直线路径中的元素,如果你有任何想法,请分享。 您可以查看下面链接中的示例:


是的,你可以检查一下,我使用了PageView:

例:

class\u MyHomePageState扩展状态{
页面控制器(PageController)=
PageController(初始页:0,视口分数:0.2);
int pageChangedIndex=0;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
主体:对齐(
对齐:对齐.bottomCenter,
子:堆栈(
对齐:对齐.bottomCenter,
儿童:[
容器(
高度:100.0,
颜色:颜色,蓝色,
),
PageView.builder(
物品计数:20,
控制器:_pageController,
物理:弹跳CrollPhysics(),
onPageChanged:(索引){
设置状态(){
pageChangedIndex=索引;
});
},
itemBuilder:(上下文,索引){
打印(pageChangedIndex.toString()+“”+index.toString());
最终刻度=最大值(刻度分数,
(满刻度-(索引-pageChangedIndex).abs())+0.2);
返回堆栈(
儿童:[
动画定位(
持续时间:持续时间(毫秒:600),
底部:索引-2==pageChangedIndex
? 10.0
:索引-1==pageChangedIndex
? 30
:索引+1==pageChangedIndex
? 30.0
:索引+2==pageChangedIndex
? 10.0
:索引==pageChangedIndex
? 50.0
: 10.0,
子:容器(
颜色:颜色,红色,
//高度:pageChangedIndex==索引
//?寻呼机高度*刻度
//     : 45.0,
//宽度:pageChangedIndex==索引
//?寻呼机高度*刻度
//     : 45.0,
孩子:文本(‘嘿,那里’),
),
),
],
);
}),
],
),
),
);
}
}

是的,您可以检查,我使用了PageView:

例:

class\u MyHomePageState扩展状态{
页面控制器(PageController)=
PageController(初始页:0,视口分数:0.2);
int pageChangedIndex=0;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
主体:对齐(
对齐:对齐.bottomCenter,
子:堆栈(
对齐:对齐.bottomCenter,
儿童:[
容器(
高度:100.0,
颜色:颜色,蓝色,
),
PageView.builder(
物品计数:20,
控制器:_pageController,
物理:弹跳CrollPhysics(),
onPageChanged:(索引){
设置状态(){
pageChangedIndex=索引;
});
},
itemBuilder:(上下文,索引){
打印(pageChangedIndex.toString()+“”+index.toString());
最终刻度=最大值(刻度分数,
(满刻度-(索引-pageChangedIndex).abs())+0.2);
返回堆栈(
儿童:[
动画定位(
持续时间:持续时间(毫秒:600),
底部:索引-2==pageChangedIndex
? 10.0
:索引-1==pageChangedIndex
? 30
:索引+1==pageChangedIndex
? 30.0
:索引+2==pageChangedIndex
? 10.0
:索引==pageChangedIndex
? 50.0
: 10.0,
子:容器(
颜色:颜色,红色,
//高度:pageChangedIndex==索引
//?寻呼机高度*刻度
//     : 45.0,
//宽度:pageChangedIndex==索引
//?寻呼机高度*刻度
//     : 45.0,
孩子:文本(‘嘿,那里’),
),
),
],
);
}),
],
),
),
);
}
}

非常感谢您的时间,我也做了类似的事情,但刷卡并不平滑,就像是单步走,您知道谁可以让它平滑滚动而不是有点跳跃吗?谢谢,还没有,但我会尝试平滑刷卡,然后返回给您,谢谢。您检查了该插件吗?非常感谢您的时间,我也做了类似的事情,但刷卡并不顺畅,就像踩踏板一样,您知道谁能让它滚动斯穆特吗
class _MyHomePageState extends State<MyHomePage> {
  PageController _pageController =
      PageController(initialPage: 0, viewportFraction: 0.2);
  int pageChangedIndex = 0;
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Align(
        alignment: Alignment.bottomCenter,
        child: Stack(
          alignment: Alignment.bottomCenter,
          children: <Widget>[

            Container(
              height: 100.0,
              color: Colors.blue,
            ),
            PageView.builder(
                itemCount: 20,
                controller: _pageController,
                physics: BouncingScrollPhysics(),
                onPageChanged: (index) {
                  setState(() {
                    pageChangedIndex = index;
                  });
                },
                itemBuilder: (context, index) {
                  print(pageChangedIndex.toString() + '  ' + index.toString());
                  final scale = max(SCALE_FRACTION,
                      (FULL_SCALE - (index - pageChangedIndex).abs()) + 0.2);
                  return Stack(
                    children: <Widget>[
                      AnimatedPositioned(
                        duration: Duration(milliseconds: 600),
                        bottom: index - 2 == pageChangedIndex
                            ? 10.0
                            : index - 1 == pageChangedIndex
                                ? 30
                                : index + 1 == pageChangedIndex
                                    ? 30.0
                                    : index + 2 == pageChangedIndex
                                        ? 10.0
                                        : index == pageChangedIndex
                                            ? 50.0
                                            : 10.0,
                        child: Container(
                          color: Colors.red,
                          // height: pageChangedIndex == index
                          //     ? PAGER_HEIGHT * scale
                          //     : 45.0,
                          // width: pageChangedIndex == index
                          //     ? PAGER_HEIGHT * scale
                          //     : 45.0,
                          child: Text('hey there'),
                        ),
                      ),
                    ],
                  );
                }),
          ],
        ),
      ),
    );
  }
}