如果它是一个简单的容器,你应该使用 AnimatedContainer。
否则你应该使用scale transition。
import 'package:flutter/material.dart';
class TestScreen extends StatefulWidget {
@override
_TestScreenState createState() => _TestScreenState();
}
class _TestScreenState extends State<TestScreen> {
final items = List<int>.generate(20, (i) => i + 1);
@override
Widget build(BuildContext context) {
final title = 'Dismissing Items';
return MaterialApp(
title: title,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
final item = items[index];
return Dismissible(
key: Key(item.toString()),
onDismissed: (direction) {
setState(() {
items.removeAt(index);
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('$item dismissed'),
),
);
},
background: Container(color: Colors.yellow),
child: AnimatedContainer(
height: 1200 / items.length,
width: MediaQuery.of(context).size.width,
duration: Duration(milliseconds: 300),
child: Text('$item'),
color: (items[index] % 2 == 0) ? Colors.green : Colors.red,
),
);
},
),
),
);
}
}