AnimatedList与主轴一起动画化大小时,似乎无法正确构建项目

时间:2020-01-22 13:30:04

标签: flutter

I shamelessly copied my issue description from Github

如果您先看一下代码,最容易解释这个问题。

  1. 查看此代码:
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

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

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

class _MyAppState extends State<MyApp> {

  final listKey = GlobalKey<AnimatedListState>();
  List<String> items = ["First", "Second", "Thrid", "Fourth"];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          actions: [
            IconButton(
              icon: Icon(Icons.swap_vertical_circle),
              onPressed: () {
                print(" ");
                final toSwap = items.removeLast();
                items.insert(0, toSwap);
                listKey.currentState.insertItem(0);
                listKey.currentState.removeItem(items.length, (context, animation) => itemBuilder(context, toSwap, animation));
              },
            )
          ],
        ),
        body: AnimatedList(
          key: listKey,
          initialItemCount: items.length,
          itemBuilder: (context, index, animation) {
            print("Building $index");
            return itemBuilder(context, items[index], animation);
          },
        ),
      ),
    );
  }

  Widget itemBuilder(BuildContext context, String item, Animation<double> animation) {
    return SizeTransition(
      sizeFactor: animation, 
      axis: Axis.vertical,
      child: Container(
        height: 250,
        child: Text(item),
      ),
    );
  }
}
  1. 运行应用程序。
  2. 滚动到底部。
  3. 按“交换操作”。

预期结果:应使用大小转换将Fourth推入列表的第一位。

实际结果: Fourth通过大小转换消失,但被推送到列表的开头。它消失了。如果您重新加载应用程序并按swap而不滚动到屏幕底部,它将按预期工作。

要执行此操作,您可能必须更改项目的高度,您需要能够在屏幕上看到第三项的一半才能正常工作,这似乎与正在处理项目有关内置的,因为如果它们在屏幕上都可以看到,那么它就可以工作。

我认为这是Flutter框架中的实际问题,但是如果不是这样,我在这里做错了吗?

0 个答案:

没有答案