Flutter 如何控制颤振中的膨胀板
所以我有一个元素列表,我从另一个列表中得到。该列表在扩展面板列表中列出 我无法展开和收缩面板。有人能帮忙吗 另外,我是一个新的颤振自由提供一个更好的方法,我有一个Flutter 如何控制颤振中的膨胀板,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,所以我有一个元素列表,我从另一个列表中得到。该列表在扩展面板列表中列出 我无法展开和收缩面板。有人能帮忙吗 另外,我是一个新的颤振自由提供一个更好的方法,我有一个 class Expansionpanel extends StatefulWidget { final List<MoneyTransactionModel> transactions; Expansionpanel({Key key, @required this.transactions}) : super(k
class Expansionpanel extends StatefulWidget {
final List<MoneyTransactionModel> transactions;
Expansionpanel({Key key, @required this.transactions}) : super(key: key);
Expansionpaneltate createState() => Expansionpaneltate();
}
class NewItem {
bool isExpanded;
final String header;
final Widget body;
final Icon iconpic;
NewItem(this.isExpanded, this.header, this.body, this.iconpic);
}
class Expansionpaneltate extends State<Expansionpanel> {
List<NewItem> getItemList() {
List<NewItem> items = List<NewItem>();
for (final item in widget.transactions) {
items.add(NewItem(
false,
item.productId,
Padding(
padding: EdgeInsets.all(20.0),
child: Column(children: <Widget>[
Text('data'),
Text('data'),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Text('data'),
Text('data'),
Text('data'),
],
),
Radio(value: null, groupValue: null, onChanged: null),
//put the children here
])),
Icon(Icons.image)));
}
return items;
}
Widget List_Criteria;
Widget build(BuildContext context) {
List_Criteria = Padding(
padding: EdgeInsets.all(10.0),
child: ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
print(getItemList()[index].isExpanded);
getItemList()[index].isExpanded = !getItemList()[index].isExpanded;
});
},
children: getItemList().map((NewItem item) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return MyListTile(header: item.header,);
},
canTapOnHeader: true,
isExpanded: item.isExpanded,
body: item.body,
);
}).toList(),
),
);
return Container(
child: List_Criteria,
);
}
}
类扩展面板扩展StatefulWidget{
最后清单交易;
Expansionpanel({Key Key,@required this.transactions}):超级(Key:Key);
ExpansionPanelState createState()=>ExpansionPanelState();
}
类NewItem{
布尔展开;
最终字符串标题;
最终窗口小部件主体;
最终图标图标图标;
NewItem(this.isExpanded、this.header、this.body、this.iconpic);
}
类ExpansionPanelState扩展状态{
List getItemList(){
列表项=列表();
for(widget.transactions中的最后一项){
items.add(NewItem)(
假,,
item.productId,
填充物(
填充:所有边缘设置(20.0),
子项:列(子项:[
文本(“数据”),
文本(“数据”),
划船(
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
文本(“数据”),
文本(“数据”),
文本(“数据”),
],
),
收音机(值:null,组值:null,更改后:null),
//把孩子们放在这里
])),
图标(Icons.image));
}
退货项目;
}
小部件列表标准;
小部件构建(构建上下文){
列表\标准=填充(
填充:所有边缘设置(10.0),
孩子:ExpansionPanelist(
expansionCallback:(int索引,bool扩展){
设置状态(){
打印(getItemList()[index].isExpanded);
getItemList()[index].isExpanded=!getItemList()[index].isExpanded;
});
},
子项:getItemList().map((NewItem){
返回扩展面板(
headerBuilder:(BuildContext上下文,bool isExpanded){
返回MyListTile(标题:item.header,);
},
坎塔波黑德:没错,
isExpanded:item.isExpanded,
正文:item.body,
);
}).toList(),
),
);
返回容器(
孩子:列出你的标准,
);
}
}
这就是我的代码到目前为止的样子小注:不要调用变量
List\u标准
类成员、顶级定义、变量、参数和命名
参数应大写每个单词的第一个字母,除了
第一个词,
以下是你问题的答案:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: SafeArea(
child: SingleChildScrollView(
child: ExpansionListExample(transactions: [
MoneyTransactionModel(productId: 'id-1'),
MoneyTransactionModel(productId: 'id-2'),
MoneyTransactionModel(productId: 'id-3'),
MoneyTransactionModel(productId: 'id-4'),
]),
),
),
),
);
}
}
class ExpansionListExample extends StatefulWidget {
final List<MoneyTransactionModel> transactions;
ExpansionListExample({
Key key,
@required this.transactions,
}) : super(key: key);
ExpansionListExampleState createState() => ExpansionListExampleState();
}
class ExpansionListExampleState extends State<ExpansionListExample> {
List<bool> openList;
@override
void initState() {
openList = List.filled(widget.transactions.length, false);
super.initState();
}
Widget build(BuildContext context) {
return Container(
child: Padding(
padding: EdgeInsets.all(10.0),
child: ExpansionPanelList(
expansionCallback: (index, isExpanded) {
setState(() {
openList[index] = !openList[index];
});
},
children: getItemList(),
),
));
}
List<ExpansionPanel> getItemList() {
return widget.transactions
.asMap()
.map((index, item) {
return MapEntry(
index,
ExpansionPanel(
headerBuilder: (context, isExpanded) {
return Text(
item.productId,
);
},
canTapOnHeader: true,
isExpanded: openList[index],
body: Padding(
padding: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Text('data'),
Text('data'),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Text('data'),
Text('data'),
Text('data'),
],
),
Radio(value: null, groupValue: null, onChanged: null),
//put the children here
],
),
),
));
})
.values
.toList();
}
}
class MoneyTransactionModel {
final String productId;
MoneyTransactionModel({this.productId});
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
家:脚手架(
正文:安全区(
子:SingleChildScrollView(
子级:ExpansionListExample(事务:[
MoneyTransactionModel(产品id:'id-1'),
MoneyTransactionModel(产品id:'id-2'),
MoneyTransactionModel(产品id:'id-3'),
MoneyTransactionModel(产品id:'id-4'),
]),
),
),
),
);
}
}
类ExpansionListExample扩展StatefulWidget{
最后清单交易;
扩展列表示例({
关键点,
@需要此项。交易,
}):super(key:key);
ExpansionListExampleState createState()=>ExpansionListExampleState();
}
类ExpansionListExampleState扩展状态{
列表开放列表;
@凌驾
void initState(){
openList=List.filled(widget.transactions.length,false);
super.initState();
}
小部件构建(构建上下文){
返回容器(
孩子:填充(
填充:所有边缘设置(10.0),
孩子:ExpansionPanelist(
expansionCallback:(索引,isExpanded){
设置状态(){
openList[index]=!openList[index];
});
},
子项:getItemList(),
),
));
}
List getItemList(){
返回widget.transactions
.asMap()
.map((索引,项){
返回映射条目(
指数
扩展面板(
headerBuilder:(上下文,isExpanded){
返回文本(
item.productId,
);
},
坎塔波黑德:没错,
isExpanded:openList[索引],
主体:填充物(
填充:所有边缘设置(20.0),
子:列(
儿童:[
文本(“数据”),
文本(“数据”),
划船(
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
文本(“数据”),
文本(“数据”),
文本(“数据”),
],
),
收音机(值:null,组值:null,更改后:null),
//把孩子们放在这里
],
),
),
));
})
价值观
.toList();
}
}
类MoneyTransactionModel{
最终字符串productId;
MoneyTransactionModel({this.productId});
}