android 抖动列表项随动画改变位置

bjp0bcyl  于 2022-11-27  发布在  Android
关注(0)|答案(2)|浏览(159)

下面的代码有一个从1到100的列表,在顶部有三个按钮来改变列表的顺序(递增、递减或洗牌)。

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

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

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

class _SamplePageState extends State<SamplePage> {
  _SamplePageState();

  final _list = new List<int>.generate(100, (i) => i + 1);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          TextButton(
            onPressed: () => setState(() {
              _list.sort((a, b) => a.compareTo(b));
            }),
            child: Text(
              "Sort increasing",
            ),
          ),
          TextButton(
            onPressed: () => setState(() {
              _list.sort((a, b) => b.compareTo(a));
            }),
            child: Text(
              "Sort decreasing",
            ),
          ),
          TextButton(
            onPressed: () => setState(() {
              _list.shuffle();
            }),
            child: Text(
              "Shuffle",
            ),
          ),
          Expanded(
            child: ListView.builder(
              itemCount: _list.length,
              itemBuilder: (context, index) => Text(
                '${_list[index]}',
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontSize: 16.0,
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

一切工作,但因为我是新的Flutter,我想知道是否有可能使列表中的项目与动画变化。
在android环境中,我们可以通过RecyclerView适配器中的setHasStableIds来实现,我想flutter上的方法可能会有所不同,但我想有可能实现相同的结果,我想知道如何实现。

编辑

我在这里添加了一个gif的项目如何改变位置动画当你使用一个原生的回收视图,这个动画位置的变化是我正在寻找的。

jw5wzhpr

jw5wzhpr1#

我自己还没有测试过,但也许AnimatedListView会做到这一点。
https://api.flutter.dev/flutter/widgets/AnimatedList-class.html
但正如我自己所说,我还没有测试出来。

bihw5rsg

bihw5rsg2#

您需要用途:可重新排序列表视图及其属性 onReorder

ReorderableListView(
            children: list
                .map((m) => ListTile(
                key: ObjectKey(m),
                title: Text(m),
            )).toList(),
            onReorder: _onReorder,
        )

来源链接:https://www.programmersought.com/article/4678939801/

相关问题