var isVisible = "Visible${data['id']}"; 我想把isVisible得到的字符串名称再转变成bool类型并赋值=false,flutter代码怎么写
时间: 2024-01-13 10:03:26 浏览: 123
在 Flutter 中,变量名是在编译时确定的,因此不能动态更改变量名。但是,可以使用 `Map` 或 `Map-like` 的数据结构来存储动态生成的变量名和其对应的值。
以下是一种可能的解决方案:
```
// 定义一个 Map,用于存储动态生成的变量名和其对应的值
Map<String, bool> boolValues = {};
// 生成 isVisible 变量名
String isVisibleName = "Visible${data['id']}";
// 将 isVisibleName 作为 Map 的 key,将其对应的值设为 false
boolValues[isVisibleName] = false;
```
在这个例子中,`boolValues` 是一个 `Map` 对象,用于存储动态生成的变量名和其对应的值。首先,使用 `isVisibleName` 生成动态变量名。然后,将 `isVisibleName` 作为 `Map` 的 key,将其对应的值设为 `false`。
这样就可以通过 `boolValues[isVisibleName]` 来获取 `isVisible` 变量名对应的值,例如:
```
if (boolValues[isVisibleName]) {
// isVisible 变量名对应的值是 true
} else {
// isVisible 变量名对应的值是 false
}
```
相关问题
以下代码_isVisible转换成动态变量实现 class MyWidget extends StatefulWidget { @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { bool _isVisible1 = false; bool _isVisible2 = false; bool _isVisible3 = false; @override Widget build(BuildContext context) { return Column( children: [ ListTile( title: Text('备注1'), trailing: IconButton( icon: Icon(_isVisible1 ? Icons.arrow_drop_up : Icons.arrow_drop_down), onPressed: () { setState(() { _isVisible1 = !_isVisible1; }); }, ), ), Visibility( visible: _isVisible1, child: Text('这是备注1的内容'), ), ListTile( title: Text('备注2'), trailing: IconButton( icon: Icon(_isVisible2 ? Icons.arrow_drop_up : Icons.arrow_drop_down), onPressed: () { setState(() { _isVisible2 = !_isVisible2; }); }, ), ), Visibility( visible: _isVisible2, child: Text('这是备注2的内容'), ), ListTile( title: Text('备注3'), trailing: IconButton( icon: Icon(_isVisible3 ? Icons.arrow_drop_up : Icons.arrow_drop_down), onPressed: () { setState(() { _isVisible3 = !_isVisible3; }); }, ), ), Visibility( visible: _isVisible3, child: Text('这是备注3的内容'), ), ], ); } }
以下是将_isVisible转换为动态变量的代码:
```dart
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
List<bool> _isVisible = List.generate(3, (_) => false);
@override
Widget build(BuildContext context) {
return Column(
children: [
ListTile(
title: Text('备注1'),
trailing: IconButton(
icon: Icon(_isVisible[0] ? Icons.arrow_drop_up : Icons.arrow_drop_down),
onPressed: () {
setState(() {
_isVisible[0] = !_isVisible[0];
});
},
),
),
Visibility(
visible: _isVisible[0],
child: Text('这是备注1的内容'),
),
ListTile(
title: Text('备注2'),
trailing: IconButton(
icon: Icon(_isVisible[1] ? Icons.arrow_drop_up : Icons.arrow_drop_down),
onPressed: () {
setState(() {
_isVisible[1] = !_isVisible[1];
});
},
),
),
Visibility(
visible: _isVisible[1],
child: Text('这是备注2的内容'),
),
ListTile(
title: Text('备注3'),
trailing: IconButton(
icon: Icon(_isVisible[2] ? Icons.arrow_drop_up : Icons.arrow_drop_down),
onPressed: () {
setState(() {
_isVisible[2] = !_isVisible[2];
});
},
),
),
Visibility(
visible: _isVisible[2],
child: Text('这是备注3的内容'),
),
],
);
}
}
```
这里使用了一个包含3个元素的bool型列表来存储每个备注的可见性状态。在构建视图时,使用ListView.builder()方法来动态生成每个列表项。每个列表项都包含一个标题和一个可展开/折叠的区域。当用户点击标题时,将使用setState()方法来切换相应的可见性状态,然后重绘UI以反映更改。
以下代码用list<map>来现实怎么写 class MyWidget extends StatefulWidget { @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { List<bool> _isVisible = List.generate(3, (_) => false); @override Widget build(BuildContext context) { return Column( children: [ ListTile( title: Text('备注1'), trailing: IconButton( icon: Icon(_isVisible[0] ? Icons.arrow_drop_up : Icons.arrow_drop_down), onPressed: () { setState(() { _isVisible[0] = !_isVisible[0]; }); }, ), ), Visibility( visible: _isVisible[0], child: Text('这是备注1的内容'), ), ListTile( title: Text('备注2'), trailing: IconButton( icon: Icon(_isVisible[1] ? Icons.arrow_drop_up : Icons.arrow_drop_down), onPressed: () { setState(() { _isVisible[1] = !_isVisible[1]; }); }, ), ), Visibility( visible: _isVisible[1], child: Text('这是备注2的内容'), ), ListTile( title: Text('备注3'), trailing: IconButton( icon: Icon(_isVisible[2] ? Icons.arrow_drop_up : Icons.arrow_drop_down), onPressed: () { setState(() { _isVisible[2] = !_isVisible[2]; }); }, ), ), Visibility( visible: _isVisible[2], child: Text('这是备注3的内容'), ), ], ); } }
以下是使用list<map>来实现的代码:
```
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
List<Map<String, dynamic>> _data = [
{'title': '备注1', 'content': '这是备注1的内容', 'isVisible': false},
{'title': '备注2', 'content': '这是备注2的内容', 'isVisible': false},
{'title': '备注3', 'content': '这是备注3的内容', 'isVisible': false},
];
@override
Widget build(BuildContext context) {
return Column(
children: _data.map((item) {
int index = _data.indexOf(item);
return Column(
children: [
ListTile(
title: Text(item['title']),
trailing: IconButton(
icon: Icon(item['isVisible'] ? Icons.arrow_drop_up : Icons.arrow_drop_down),
onPressed: () {
setState(() {
_data[index]['isVisible'] = !_data[index]['isVisible'];
});
},
),
),
Visibility(
visible: item['isVisible'],
child: Text(item['content']),
),
],
);
}).toList(),
);
}
}
```
使用list<map>替代了原有代码中的List<bool>和重复的ListTile和Visibility部分,将每个item的数据以map形式存储,通过遍历_data列表来生成相应的UI。
阅读全文