initialize method

Future<bool> initialize()

Initialize speech recognition This will automatically request microphone permission if not granted

Implementation

Future<bool> initialize() async {
  if (_isInitialized) return _isAvailable;

  try {
    // Check and request microphone permission
    _permissionStatus = await Permission.microphone.status;

    if (!_permissionStatus.isGranted) {
      _permissionStatus = await Permission.microphone.request();
      notifyListeners();

      if (!_permissionStatus.isGranted) {
        _isInitialized = true;
        _isAvailable = false;

        if (_permissionStatus.isPermanentlyDenied) {
          onError?.call('Microphone permission permanently denied. Please enable it in settings.');
        } else {
          onError?.call('Microphone permission denied.');
        }

        notifyListeners();
        return false;
      }
    }

    _isAvailable = await _speech.initialize(
      onError: _handleError,
      onStatus: _handleStatus,
      debugLogging: kDebugMode,
    );

    if (_isAvailable) {
      _availableLocales = await _speech.locales();

      // Set current locale
      if (localeId != null) {
        _currentLocale = localeId!;
      } else {
        final systemLocale = await _speech.systemLocale();
        _currentLocale = systemLocale?.localeId ?? 'en_US';
      }
    }

    _isInitialized = true;
    notifyListeners();
    return _isAvailable;
  } catch (e) {
    _isInitialized = false;
    _isAvailable = false;
    onError?.call('Failed to initialize speech recognition: $e');
    notifyListeners();
    return false;
  }
}