我有一个 ExpansionTile
来检查是否允许用户启用它:
ExpansionTile(
tilePadding: widget.rent ? EdgeInsets.all(0) : null,
onExpansionChanged: (bool value) {
if (_canCreateBill) {
setState(() {
_billable = value;
});
} else {
return Navigator.of(context)
.pushNamed('/invoice-details')
.then((val) async {
await _getBillingInfo();
setState(() {
_billable =
_canCreateBill;
});
});
}
widget.onSwitchChange(value);
},
initiallyExpanded: _billable,
title: Text(translate('expense.create_invoice')),
subtitle: Text(translate('expense.create_invoice_info')),
trailing: IgnorePointer(
child: Switch(
value: _billable,
onChanged: (_) {},
),
),
children: [
Visibility(
visible: _canCreateBill,
child: _billingInfo(),
),
],
);
幸福之路:
这里我们有 _canCreateBill
来控制用户是否可以启用开关。如果用户点击并且他不被允许,我将他移动到一个页面以添加一些信息。添加该信息后,他回来并启用了开关。
问题: 用户无需添加任何信息即可返回。开关将被禁用,但 ExpansionTile 将处于活动状态,因为我们已经点击了它:
如何检查?我们可以禁用 ExpansionTile
或以某种方式强制点击吗?
此选项不是解决方案:
IgnorePointer(
ignoring: true,
child: ExpansionTile()
)