var isVisible = "Visible${data['id']}"; 我想把isVisible得到的字符串名称再转变成bool类型并赋值=false,flutter代码怎么写
时间: 2024-01-13 08:03:26 浏览: 16
在 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
}
```
相关问题
lv_obj_is_visible
lv_obj_is_visible是一个函数,用于判断一个LVGL对象是否可见。LVGL是一个开源的图形库,用于嵌入式系统的图形界面开发。
该函数的原型如下:
bool lv_obj_is_visible(const lv_obj_t * obj)
参数obj是一个LVGL对象的指针,可以是任何LVGL对象,如窗口、按钮、标签等。
函数返回一个bool值,如果该对象可见,则返回true;否则返回false。
可见性是指对象是否在屏幕上可见。当一个对象被创建时,默认情况下是可见的。但是,可以通过设置对象的隐藏属性来使其不可见。隐藏属性可以通过lv_obj_set_hidden函数来设置。
使用lv_obj_is_visible函数可以方便地判断一个对象是否可见,从而根据需要进行相应的操作或者显示。
以下代码_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以反映更改。