Android 颤振-如何用动画扩展小部件?
所以我有以下代码Android 颤振-如何用动画扩展小部件?,android,flutter,user-interface,dart,Android,Flutter,User Interface,Dart,所以我有以下代码 Row( children: [ IconButton(), // IconButton1 Expanded( child: Container( child: Textfield(), ), ), IconButton(), // IconButton2 ] ) 当我在textfield中键入某些内容时,我希望IconButton1被删除,textfield容器或textfield本身通过动画展
Row(
children: [
IconButton(), // IconButton1
Expanded(
child: Container(
child: Textfield(),
),
),
IconButton(), // IconButton2
]
)
当我在textfield中键入某些内容时,我希望IconButton1被删除,textfield容器或textfield本身通过动画展开,以占据IconButton1的空间。我可以做到这一点,但我不能做它与动画
我尝试了AnimatedContainer和AnimatedSwitcher,但它们没有按预期工作。如果它是一个简单的容器,您应该使用AnimatedContainer。 否则你应该使用
导入“包装:颤振/材料.省道”;
类TestScreen扩展了StatefulWidget{
@凌驾
_TestScreenState createState();
}
类_TestScreenState扩展状态{
最终项目=列表。生成(20,(i)=>i+1);
@凌驾
小部件构建(构建上下文){
最终标题=‘解雇项目’;
返回材料PP(
标题:标题,,
主题:主题数据(
主样本:颜色。蓝色,
),
家:脚手架(
appBar:appBar(
标题:文本(标题),
),
正文:ListView.builder(
itemCount:items.length,
itemBuilder:(上下文,索引){
最终项目=项目[索引];
可驳回的回报(
key:key(item.toString()),
onDismissed:(方向){
设置状态(){
项目移除(索引);
});
ScaffoldMessenger.of(上下文)。showSnackBar(
小吃条(
内容:文本(“$item disposed”),
),
);
},
背景:容器(颜色:Colors.yellow),
子:动画容器(
高度:1200/件。长度,
宽度:MediaQuery.of(context).size.width,
持续时间:持续时间(毫秒:300),
子项:文本(“$item”),
颜色:(项目[索引]%2==0)?颜色。绿色:颜色。红色,
),
);
},
),
),
);
}
}
问题在于容器
的宽度
未在容器
内定义。容器
放在扩展的
小部件中,这样它就可以获得所能达到的宽度。现在的问题是,当我删除行中的一个组件时,“扩展”将扩展容器。这就是我想要一些动画的地方,因为到目前为止,它只是扩展,没有任何预期的动画。检查代码,我已经用代码片段编辑了我的答案。谢谢,但这不是我想要的。如果你读了我的问题,你会发现我想要2个图标按钮,一个文本字段,1个以上的图标按钮,这4个元素排成一行。当我在textfield中键入内容时,前两个图标按钮应该消失,textfield应该水平扩展,以占据移除的那两个图标按钮的空间。您还可以检查我提供的代码,以便了解我要构建的小部件树。
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,
),
);
},
),
),
);
}
}