1

用下面的示例代码,就是得到一个很丑陋的动画。我什至会说,这根本不是动画。调用 setstate 后,下一页才会出现。

如何使用 PageView 创建平滑的删除动画?如果无法通过 PageView 实现,是否还有其他具有“快照卡”功能的替代方案?

这是我的代码:

class SwipeScreen extends StatefulWidget {
  const SwipeScreen({Key key}) : super(key: key);

  static const routeName = '/swipe';

  @override
  _SwipeScreenState createState() => _SwipeScreenState();
}

class _SwipeScreenState extends State<SwipeScreen> {
  List<String> content = ['one', 'two', 'three', 'four', 'five'];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView.builder(
        scrollDirection: Axis.vertical,
        itemCount: content.length,
        controller: PageController(viewportFraction: 0.8),
        itemBuilder: (context, index) {
          return Dismissible(
            key: ValueKey(content[index]),
            child: Card(
              child: Container(
                height: MediaQuery.of(context).size.height * 0.8,
                child: Text('test'),
              ),
            ),
            onDismissed: (direction) {
              setState(() {
                content = List.from(content)..removeAt(index);
              });
            },
          );
        },
      ),
    );
  }
}
4

2 回答 2

0

替换PageView.builder()ListView.builder()将创建更平滑的动画。

希望这就是你要找的!

于 2020-11-04T23:44:33.347 回答
0

Unfortunately, the PageView widget is not intended to be used with the Dismissible widget as the animation when the dismiss is complete is not implemented.

您仍然可以将您的 PageView 更改为 aListView并设置一个物理以PageScrollPhysics()使动画关闭,但您可能会遇到一些其他关于 Widget 大小的问题

于 2020-11-04T23:47:52.050 回答