getBuildMode method

WidgetBuildMode getBuildMode(
  1. BaseParam? baseParam
)
inherited

Implementation

WidgetBuildMode getBuildMode(BaseParam? baseParam) {
  WidgetBuildMode _widgetBuildMode = WidgetBuildMode.disabled;
  if (baseParam != null) {
    bool _disabled = false;
    if (isCupertinoMode) {
      if (baseParam.forceUseMaterial) {
        /// Force use Material mode
        _widgetBuildMode = WidgetBuildMode.forceUseMaterial;
      } else {
        /// Use Cupertino mode
        _widgetBuildMode = WidgetBuildMode.cupertino;
      }
    } else if (isMaterialMode) {
      if (baseParam.forceUseCupertino) {
        /// Force use Cupertino mode
        _widgetBuildMode = WidgetBuildMode.forceUseCupertino;
      } else {
        /// Use Material mode
        _widgetBuildMode = WidgetBuildMode.material;
      }
    } else {
      assert(true, 'Only support Cupertino mode and Materila mode.');
    }
    if (kIsWeb && baseParam.disabledOnWeb) {
      _widgetBuildMode = WidgetBuildMode.disabled;
    } else {
      switch (defaultTargetPlatform) {
        case TargetPlatform.android:
          if (baseParam.disabledOnAndroid) {
            _disabled = true;
          }
          break;
        case TargetPlatform.fuchsia:
          if (baseParam.disabledOnFuchsia) {
            _disabled = true;
          }
          break;
        case TargetPlatform.iOS:
          if (baseParam.disabledOnIOS) {
            _disabled = true;
          }
          break;
        case TargetPlatform.linux:
          if (baseParam.disabledOnLinux) {
            _disabled = true;
          }
          break;
        case TargetPlatform.macOS:
          if (baseParam.disabledOnMacOS) {
            _disabled = true;
          }
          break;
        case TargetPlatform.windows:
          if (baseParam.disabledOnWindows) {
            _disabled = true;
          }
          break;
      }
      // Check disabledOnOthers after the switch
      if (!_disabled && baseParam.disabledOnOthers) {
        // Only apply disabledOnOthers if platform doesn't match any specific case
        final isKnownPlatform = defaultTargetPlatform == TargetPlatform.android ||
            defaultTargetPlatform == TargetPlatform.fuchsia ||
            defaultTargetPlatform == TargetPlatform.iOS ||
            defaultTargetPlatform == TargetPlatform.linux ||
            defaultTargetPlatform == TargetPlatform.macOS ||
            defaultTargetPlatform == TargetPlatform.windows;
        if (!isKnownPlatform) {
          _disabled = true;
        }
      }
    }
    if (_disabled) {
      _widgetBuildMode = WidgetBuildMode.disabled;
    }
  } else {
    if (isCupertinoMode) {
      _widgetBuildMode = WidgetBuildMode.cupertino;
    } else if (isMaterialMode) {
      _widgetBuildMode = WidgetBuildMode.material;
    } else {
      assert(true, 'Only support Cupertino mode and Materila mode.');
    }
  }
  return _widgetBuildMode;
}