首页 > 解决方案 > Flutter:禁用 ExpansionTile

问题描述

我有一个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()
)

标签: flutterflutter-layout

解决方案


推荐阅读