如何在 Flutter 中使用 AnimatedList Widget
How to use AnimatedList Widget in Flutter
我看到了这个video on youtube
我正在尝试实现一个动画列表,
但我对动画不是很熟悉。
我应该插入的内容
position: animation.drive(),
和
removeItem(_index,(context,animation)=> /// what I'm supposed to do
here
),);
这是代码(与 "starting app" 相比只有几处变化)
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
List<int> _list = [];
final GlobalKey<AnimatedListState> _listKey = GlobalKey<AnimatedListState>();
void _addItem() {
final int _index = _list.length;
_list.insert(_index,_index);
_listKey.currentState.insertItem(_index);
}
void _removeItem() {
final int _index = _list.length-1;
_listKey.currentState.removeItem(_index,(context,animation)=> /// what I'm supposed to do here
),);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: AnimatedList(
key: _listKey,
initialItemCount: 0,
itemBuilder: (BuildContext context, int index, Animation animation) {
return SlideTransition(
position: animation.drive(
/// what I'm supposed to do here
),
child: Card(child: Text(_list[index].toString()),));
},),
),
floatingActionButton: Column(children: <Widget>[
FloatingActionButton(
onPressed:()=> _addItem(),
tooltip: 'Increment',
child: Icon(Icons.add),),
FloatingActionButton(
onPressed: ()=>_removeItem(),
tooltip: 'Decrement',
child: Icon(Icons.remove),),
],),
);
}
}
四处寻找有关 SliderTransition 的教程,我看到了这个:
SlideTransition(
position: Tween<Offset>(
begin: const Offset(-1, 0),
end: Offset.zero,
).animate(animation),
虽然我有这个:
SlideTransition(
position: animation.drive(
// what i supposed to go here ??
),
有人可以帮忙吗?
是只漏了这个还是我还漏了别的东西?
提前致谢
[编辑:AnimatedList page 显示消息
This page is deprecated and its content may be out of date.
事实上似乎根本没有使用这个小部件]
我找到了问题的答案
你可以找到我的代码--> HERE <--
及以下
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
List<int> _list = [];
final GlobalKey<AnimatedListState> _listKey = GlobalKey<AnimatedListState>();
void _addItem() {
final int _index = _list.length;
_list.insert(_index,_index);
_listKey.currentState.insertItem(_index);
}
void _removeItem() {
final int _index = _list.length-1;
_listKey.currentState.removeItem(_index,(context,animation)=> Container()); /// what I'm supposed to do here
_list.removeAt(_index);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: AnimatedList(
key: _listKey,
initialItemCount: 0,
itemBuilder: (BuildContext context, int index, Animation animation) {
return _buildItem(_list[index].toString(),animation);
},),
),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
FloatingActionButton(
onPressed:()=> _addItem(),
tooltip: 'Increment',
child: Icon(Icons.add),),
FloatingActionButton(
onPressed: ()=>_removeItem(),
tooltip: 'Decrement',
child: Icon(Icons.remove),),
],),
],),
);
}
Widget _buildItem(String _item, Animation _animation) {
return SizeTransition(
sizeFactor: _animation,
child: Card(
child: ListTile(
title: Text(
_item,
),
),
),
);
}
}
我看到了这个video on youtube
我正在尝试实现一个动画列表,
但我对动画不是很熟悉。
我应该插入的内容
position: animation.drive(),
和
removeItem(_index,(context,animation)=> /// what I'm supposed to do here ),);
这是代码(与 "starting app" 相比只有几处变化)
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
List<int> _list = [];
final GlobalKey<AnimatedListState> _listKey = GlobalKey<AnimatedListState>();
void _addItem() {
final int _index = _list.length;
_list.insert(_index,_index);
_listKey.currentState.insertItem(_index);
}
void _removeItem() {
final int _index = _list.length-1;
_listKey.currentState.removeItem(_index,(context,animation)=> /// what I'm supposed to do here
),);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: AnimatedList(
key: _listKey,
initialItemCount: 0,
itemBuilder: (BuildContext context, int index, Animation animation) {
return SlideTransition(
position: animation.drive(
/// what I'm supposed to do here
),
child: Card(child: Text(_list[index].toString()),));
},),
),
floatingActionButton: Column(children: <Widget>[
FloatingActionButton(
onPressed:()=> _addItem(),
tooltip: 'Increment',
child: Icon(Icons.add),),
FloatingActionButton(
onPressed: ()=>_removeItem(),
tooltip: 'Decrement',
child: Icon(Icons.remove),),
],),
);
}
}
四处寻找有关 SliderTransition 的教程,我看到了这个:
SlideTransition(
position: Tween<Offset>(
begin: const Offset(-1, 0),
end: Offset.zero,
).animate(animation),
虽然我有这个:
SlideTransition(
position: animation.drive(
// what i supposed to go here ??
),
有人可以帮忙吗?
是只漏了这个还是我还漏了别的东西?
提前致谢
[编辑:AnimatedList page 显示消息
This page is deprecated and its content may be out of date.
事实上似乎根本没有使用这个小部件]
我找到了问题的答案
你可以找到我的代码--> HERE <--
及以下
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
List<int> _list = [];
final GlobalKey<AnimatedListState> _listKey = GlobalKey<AnimatedListState>();
void _addItem() {
final int _index = _list.length;
_list.insert(_index,_index);
_listKey.currentState.insertItem(_index);
}
void _removeItem() {
final int _index = _list.length-1;
_listKey.currentState.removeItem(_index,(context,animation)=> Container()); /// what I'm supposed to do here
_list.removeAt(_index);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: AnimatedList(
key: _listKey,
initialItemCount: 0,
itemBuilder: (BuildContext context, int index, Animation animation) {
return _buildItem(_list[index].toString(),animation);
},),
),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
FloatingActionButton(
onPressed:()=> _addItem(),
tooltip: 'Increment',
child: Icon(Icons.add),),
FloatingActionButton(
onPressed: ()=>_removeItem(),
tooltip: 'Decrement',
child: Icon(Icons.remove),),
],),
],),
);
}
Widget _buildItem(String _item, Animation _animation) {
return SizeTransition(
sizeFactor: _animation,
child: Card(
child: ListTile(
title: Text(
_item,
),
),
),
);
}
}