解決Flutter Bottom Modal彈跳兩次的問題

前言

在開發 Flutter 的時候,不知為何觸發 Bottom Modal 的選單時,總是會觸發兩次,問題如下影片

預期的行為

預期只會出現一次

解決方法

增加 listener 檢查目前的 Widget 是否已經被 Focus,避免觸發兩次

_institutionOnFocus.addListener(() {
  if (_institutionOnFocus.hasFocus) {
    BottomModalBuilder.items(
      context,
      _institutionController,
      _institutionList.map((i) => i.name).toList(),
    );
  }
});

/// Institution text field
Widget _showInstitutionField(CheckupDownloadState state) {
  return TextFormFieldBuilder(
    labelText: '健檢機構',
    hintText: '請選擇',
    controller: _institutionController,
    focusNode: _institutionOnFocus,
    isReadOnly: true,
    validateFailureMessage: !state.isInsitutionValid ? '請選擇機構' : null,
  );
}