# Firebase Remote Config

Nada melhor do que a própria definição deles para O que é o Remote Config:\\

*"O Firebase Remote Config é um serviço em nuvem que permite alterar o comportamento e a aparência do seu aplicativo sem exigir que os usuários baixem uma atualização do aplicativo. Ao usar o Remote Config, você cria valores padrão no aplicativo que controlam o comportamento e a aparência do seu aplicativo. Em seguida, você pode usar posteriormente o console do Firebase ou as APIs do backend do Remote Config para substituir os valores padrão no aplicativo para todos os usuários do aplicativo ou para segmentos de sua base de usuários. Seu aplicativo controla quando as atualizações são aplicadas, e ele pode verificar frequentemente as atualizações e aplicá-las com um impacto negligenciável no desempenho."*

Vou aqui apenas mostrar um exemplo de como fiz a utilização do Remote Config em um APP nosso.\\

Criei um arquivo de setup, com uma função para buscar ativar os valores, e também setar valores default para cada variavel, em caso de qualquer problema para buscar externamente.

```dart
final remoteConfig = FirebaseRemoteConfig.instance;

setupRemoteConfig() async {
  await remoteConfig.setConfigSettings(
    RemoteConfigSettings(
      fetchTimeout: const Duration(minutes: 1),
      minimumFetchInterval:
          SetupFlavors().currentFlavor == FlavorsOptions.staging
              ? const Duration(minutes: 5)
              : const Duration(hours: 2),
    ),
  );

  await remoteConfig.setDefaults(const {
    "MAX_DISTANCE": 200,
    "MIN_DISTANCE": 0,
    "MAX_AGE": 80,
    "MIN_AGE": 18,
  });

  try {
    await remoteConfig.fetchAndActivate();
  } catch (e) {
    log(e.toString());
  }
}
```

fetchTimeout: Máxima Duração para aguardar uma resposta ao buscar a configuração do servidor Remote Config. O padrão é de um minuto.

minimumFetchInterval: Valor máximo para as informações ficarem guardadas em cache antes de fazerem a busca novamente no servidor, o valor padrão é de 12 horas.

\
Esta função de setupRemoteConfig deve ser chamada dentro da main do projeto.

```dart
setupRemoteConfig();
```

Para ter acesso a esses valores em um variavel em qualquer lugar do APP, sem precisar instanciar toda vez o Remote Config, eu adicionei o seguinte no mesmo arquivo:

```dart
final int MAX_DISTANCE = remoteConfig.getInt("MAX_DISTANCE");

final int MIN_DISTANCE = remoteConfig.getInt("MIN_DISTANCE");

final int MAX_AGE = remoteConfig.getInt("MAX_AGE");

final int MIN_AGE = remoteConfig.getInt("MIN_AGE");
```

O remote config permite vários tipos para buscar, int, double, bool, string, etc.
