Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振-小部件中的部分幻灯片转换_Dart_Flutter - Fatal编程技术网

Dart 颤振-小部件中的部分幻灯片转换

Dart 颤振-小部件中的部分幻灯片转换,dart,flutter,Dart,Flutter,我正在尝试创建下面的动画,其中在容器后面有一个小部件 我试图使用类Dismissible,但它的动画不会在某个点停止,它会随着项目结束而消失,根据下面的gif: 我将代码插入到SlideTransition类中,但我不确定如何将onHorizontalDragStart,onHorizontalDragUpdate,OnHorizontalDragen与隐藏的小部件集成以生成预期效果 你能帮我解决这个问题吗 在屏幕上显示以下代码: 导入“包装:颤振/材料.省道”; void main(){

我正在尝试创建下面的动画,其中在
容器
后面有一个小部件

我试图使用类
Dismissible
,但它的动画不会在某个点停止,它会随着项目结束而消失,根据下面的gif:

我将代码插入到
SlideTransition
类中,但我不确定如何将
onHorizontalDragStart
onHorizontalDragUpdate
OnHorizontalDragen
与隐藏的小部件集成以生成预期效果

你能帮我解决这个问题吗

在屏幕上显示以下代码:

导入“包装:颤振/材料.省道”;
void main(){
runApp(新的MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主页:新建MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
动画(动画),;
bool_dragUnderway=false;
@凌驾
void initState(){
_控制器=新的AnimationController(
vsync:这个,,
持续时间:常数持续时间(毫秒:200),
);
_动画=新曲线动画(
父节点:_控制器,
曲线:新间隔(0.0,1.0,曲线:曲线。线性),
);
_controller.reverse();
super.initState();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(),
正文:新中心(
儿童:新的手势检测器(
//onHorizontalDragStart:,
//onHorizontalDragUpdate:,
//在水平方向:,
子:新幻灯片转换(
职位:新吐温(
开始:Offset.zero,
结束:常数偏移(1.0,0.0),
).制作动画(_动画),
子容器:新容器(
装饰:新盒子装饰(
边界:新边界(
顶部:新的BorderSide(样式:BorderStyle.solid,颜色:Colors.black26),
底部:新的BorderSide(样式:BorderStyle.solid,颜色:Colors.black26),
)
),
填充:仅限新边缘组(顶部:20.0,底部:20.0),
孩子:新的一排(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
新文本(“foo”),
],
),
),
)
)
),
);
}
}

我找到了一个解决方案,按照下面的代码和演示进行操作:

导入“包装:颤振/材料.省道”;
void main(){
runApp(新的MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主页:新建MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
动画(动画),;
void initState(){
super.initState();
_控制器=新的AnimationController(持续时间:
常量持续时间(毫秒:246),vsync:this;
_动画=新曲线动画(
父节点:_控制器,
曲线:新间隔(0.0,1.0,曲线:曲线。线性),
);
}
无效移动(DragUpdate详细信息){
最终双增量=细节。主增量/304;
切换(上下文的方向性){
case TextDirection.rtl:
_controller.value+=delta;
打破
case TextDirection.ltr:
_controller.value-=delta;
打破
}
}  
void_handleDragEnd(图纸详图){
bool_isFlingGesture=-details.velocity.pixelsPerSecond.dx>700;
如果(_isFlingGesture){
最终双flingVelocity=details.velocity.pixelsPerSecond.dx;
_控制器.fling(速度:flingVelocity.abs()*0.003333);
}否则如果(_.value<0.4){
_controller.reverse();
}否则{
_controller.forward();
}
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(),
正文:新中心(
儿童:新的手势检测器(
水平排水更新:_移动,
在水平方向上:_handleDragEnd,
子:新堆栈(
儿童:[
新定位。填充(
孩子:新的一排(
mainAxisAlignment:mainAxisAlignment.end,
儿童:[
新容器(
装饰:新盒子装饰(
颜色:颜色。黑色38,
边界:新边界(
顶部:新的BorderSide(样式:BorderStyle.solid,颜色:Colors.black12),
底部:新的BorderSide(样式:BorderStyle.solid,颜色:Colors.black12),
),
),
孩子:新的图标按钮(
填充:仅限新边集(顶部:16.0,底部:16.0,左侧:24.0,右侧:24.0),
图标:新图标(图标。拇指朝上),
颜色:新颜色(0xFFFFFF),
按下:(){},
)
),
新容器(
装饰:新盒子装饰(
颜色:颜色。黑色54,
边界:新边界(
顶部:新的BorderSide(样式:BorderStyle.solid,颜色:Colors.black12),
底部:新的BorderSide(样式:BorderStyle.solid,颜色:Colors.bla)
import 'package:flutter/material.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
  AnimationController _controller;
  Animation<double> _animation;
  bool _dragUnderway = false;

  @override
  void initState() {
    _controller = new AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 200),
    );
    _animation = new CurvedAnimation(
      parent: _controller,
      curve: new Interval(0.0, 1.0, curve: Curves.linear),
    );
    _controller.reverse();
    super.initState();
  }



  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(),
      body: new Center(
        child: new GestureDetector(
          //onHorizontalDragStart: ,
          //onHorizontalDragUpdate:,
          //onHorizontalDragEnd: ,
          child: new SlideTransition(
            position: new Tween<Offset>(
              begin:  Offset.zero,
              end: const Offset(1.0, 0.0),
            ).animate(_animation),
            child: new Container(
              decoration: new BoxDecoration(
                border: new Border(
                  top: new BorderSide(style: BorderStyle.solid, color: Colors.black26),
                  bottom: new BorderSide(style: BorderStyle.solid, color: Colors.black26),
                )
              ),
              padding: new EdgeInsets.only(top: 20.0, bottom: 20.0),
              child: new Row(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: <Widget>[
                  new Text('foo'),                  
                ],
              ),
            ),
          )
        )
      ),
    );
  }
}
import 'package:flutter/material.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
  AnimationController _controller;
  Animation<double> _animation;

  void initState() {
    super.initState();
    _controller = new AnimationController(duration: 
      const Duration(milliseconds: 246), vsync: this);

    _animation = new CurvedAnimation(
      parent: _controller,
      curve: new Interval(0.0, 1.0, curve: Curves.linear),
    );
  }

  void _move(DragUpdateDetails details) {
    final double delta = details.primaryDelta / 304;
    switch (Directionality.of(context)) {
      case TextDirection.rtl:
        _controller.value += delta;
        break;
      case TextDirection.ltr:
        _controller.value -= delta;
        break;
    }
  }  

  void _handleDragEnd(DragEndDetails details) {
    bool _isFlingGesture = -details.velocity.pixelsPerSecond.dx > 700;

    if (_isFlingGesture) {
      final double flingVelocity = details.velocity.pixelsPerSecond.dx;
      _controller.fling(velocity: flingVelocity.abs() * 0.003333);
    } else if (_controller.value < 0.4) {
      _controller.reverse();
    } else {
      _controller.forward();
    }
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(),
      body: new Center(
        child: new GestureDetector(
          onHorizontalDragUpdate: _move,
          onHorizontalDragEnd: _handleDragEnd,
          child: new Stack(
            children: <Widget>[
              new Positioned.fill(            
                child: new Row(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: <Widget>[
                    new Container(
                      decoration: new BoxDecoration(
                        color: Colors.black38,
                        border: new Border(
                          top: new BorderSide(style: BorderStyle.solid, color: Colors.black12),
                          bottom: new BorderSide(style: BorderStyle.solid, color: Colors.black12),
                        ),
                      ),
                      child: new IconButton(                          
                        padding: new EdgeInsets.only(top: 16.0, bottom: 16.0, left: 24.0, right: 24.0),
                        icon: new Icon(Icons.thumb_up),
                        color: new Color(0xFFFFFFFF),
                        onPressed: () {},
                      )
                    ),
                    new Container(
                      decoration: new BoxDecoration(
                        color: Colors.black54,
                        border: new Border(
                          top: new BorderSide(style: BorderStyle.solid, color: Colors.black12),
                          bottom: new BorderSide(style: BorderStyle.solid, color: Colors.black12),
                        ),
                      ),
                      child: new IconButton(                          
                        padding: new EdgeInsets.only(top: 16.0, bottom: 16.0, left: 24.0, right: 24.0),
                        icon: new Icon(Icons.edit),
                        color: new Color(0xFFFFFFFF),
                        onPressed: () {},
                      )
                    ),
                    new Container(
                      decoration: new BoxDecoration(
                        color: new Color(0xFFE57373),
                        border: new Border(
                          top: new BorderSide(style: BorderStyle.solid, color: const Color(0xFFE57373)),
                          bottom: new BorderSide(style: BorderStyle.solid, color: const Color(0xFFE57373)),
                        ),
                      ),
                      child: new IconButton(                          
                        padding: new EdgeInsets.only(top: 16.0, bottom: 16.0, left: 24.0, right: 24.0),
                        icon: new Icon(Icons.delete),
                        color: new Color(0xFFFFFFFF),
                        onPressed: () {},
                      )
                    ),
                  ],
                ),
              ),
              new SlideTransition(
                position: new Tween<Offset>(
                  begin:  Offset.zero,
                  end: const Offset(-0.6, 0.0), //controls the opening of the slice
                ).animate(_animation),
                child: new Container(
                  decoration: new BoxDecoration(
                    border: new Border(
                      top: new BorderSide(style: BorderStyle.solid, color: Colors.black26),
                      bottom: new BorderSide(style: BorderStyle.solid, color: Colors.black26),
                    ),
                    color: new Color(0xFFFFFFFF),
                  ),
                  padding: new EdgeInsets.only(top: 20.0, bottom: 20.0),
                  child: new Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: <Widget>[
                      new Text('foo'),
                    ],
                  ),
                ),
              ),                           
            ],
          )
        )
      ),
    );
  }
}