[{"data":1,"prerenderedAt":22},["ShallowReactive",2],{"articolo-feature-flags-in-flutter-con-firebase-remote-config-attivare-funzionalita-da-remoto":3,"comments-article-feature-flags-in-flutter-con-firebase-remote-config-attivare-funzionalita-da-remoto":21},{"id":4,"title":5,"slug":6,"excerpt":7,"body":8,"cover_image":9,"video_url":10,"status":11,"published_at":12,"meta_title":13,"meta_description":14,"category":15,"author":19},55,"Feature flags in Flutter con Firebase Remote Config: attivare funzionalità da remoto","feature-flags-in-flutter-con-firebase-remote-config-attivare-funzionalita-da-remoto","Scopri come usare Firebase Remote Config in Flutter per gestire feature flags, A\u002FB test e configurazioni dinamiche senza pubblicare nuove versioni dell'app.","## Cosa sono i feature flags e perché usarli\n\nI *feature flags* (o feature toggles) sono interruttori che permettono di attivare o disattivare funzionalità della tua app **senza rilasciare una nuova versione** sugli store. Sono utili per:\n\n- Rilasci graduali (rollout progressivo di una feature).\n- A\u002FB testing su gruppi di utenti.\n- Kill switch per disattivare rapidamente una funzione problematica.\n- Personalizzazione dei contenuti in base al segmento di utenza.\n\nIn Flutter, uno degli strumenti più comodi per implementarli è **Firebase Remote Config**, che consente di definire valori sul server e leggerli dall'app in tempo reale.\n\n## Setup del progetto\n\nAggiungi le dipendenze necessarie al file `pubspec.yaml`:\n\n```yaml\ndependencies:\n  firebase_core: ^3.6.0\n  firebase_remote_config: ^5.1.3\n```\n\nAssicurati di aver configurato Firebase nel progetto tramite `flutterfire configure`. Poi inizializza Firebase nel `main`:\n\n```dart\nimport 'package:firebase_core\u002Ffirebase_core.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'firebase_options.dart';\n\nFuture\u003Cvoid> main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n  await Firebase.initializeApp(\n    options: DefaultFirebaseOptions.currentPlatform,\n  );\n  runApp(const MyApp());\n}\n```\n\n## Configurare Remote Config\n\nCreiamo un servizio dedicato che incapsula la logica di Remote Config. Impostiamo prima i **valori di default**, fondamentali per garantire un comportamento coerente quando l'app è offline o al primo avvio.\n\n```dart\nimport 'package:firebase_remote_config\u002Ffirebase_remote_config.dart';\n\nclass RemoteConfigService {\n  final FirebaseRemoteConfig _rc = FirebaseRemoteConfig.instance;\n\n  Future\u003Cvoid> init() async {\n    await _rc.setConfigSettings(\n      RemoteConfigSettings(\n        fetchTimeout: const Duration(seconds: 10),\n        minimumFetchInterval: const Duration(hours: 1),\n      ),\n    );\n\n    \u002F\u002F Valori di default usati finché non arriva il fetch dal server\n    await _rc.setDefaults(const {\n      'new_checkout_enabled': false,\n      'welcome_message': 'Benvenuto!',\n      'max_items_per_page': 20,\n    });\n\n    await _rc.fetchAndActivate();\n  }\n\n  bool get newCheckoutEnabled => _rc.getBool('new_checkout_enabled');\n  String get welcomeMessage => _rc.getString('welcome_message');\n  int get maxItemsPerPage => _rc.getInt('max_items_per_page');\n}\n```\n\n### minimumFetchInterval\n\nAttenzione a `minimumFetchInterval`: in produzione un valore alto (es. 1 ora) evita di sovraccaricare il server e ridurre i costi. In **sviluppo** puoi impostarlo a `Duration.zero` per vedere subito le modifiche, ma ricorda che Firebase limita comunque il numero di fetch per evitare throttling.\n\n## Usare i flag nella UI\n\nUna volta inizializzato il servizio, leggere un flag è immediato:\n\n```dart\nclass CheckoutButton extends StatelessWidget {\n  final RemoteConfigService config;\n  const CheckoutButton({super.key, required this.config});\n\n  @override\n  Widget build(BuildContext context) {\n    if (config.newCheckoutEnabled) {\n      return const NewCheckoutFlow();\n    }\n    return const LegacyCheckoutFlow();\n  }\n}\n```\n\n## Aggiornamenti in tempo reale con onConfigUpdated\n\nRemote Config supporta un listener che notifica quando i valori cambiano sul server, permettendo aggiornamenti *live* senza riavviare l'app:\n\n```dart\n_rc.onConfigUpdated.listen((event) async {\n  await _rc.activate();\n  \u002F\u002F Notifica la UI, ad esempio tramite un ValueNotifier o uno stream\n  notifyListeners();\n});\n```\n\nQuesto è particolarmente potente per i **kill switch**: puoi disattivare una feature difettosa e vedere l'effetto sui dispositivi degli utenti in pochi secondi.\n\n## Integrazione con la gestione dello stato\n\nPuoi esporre i flag tramite un `ChangeNotifier` o un provider per renderli reattivi. Ecco un esempio con `ValueNotifier`:\n\n```dart\nclass FeatureFlags extends ChangeNotifier {\n  final RemoteConfigService _service;\n  FeatureFlags(this._service) {\n    _service.init().then((_) => notifyListeners());\n  }\n\n  bool get newCheckout => _service.newCheckoutEnabled;\n}\n```\n\n## Best practice\n\n- **Definisci sempre i default**: garantiscono un'esperienza coerente offline e al primo avvio.\n- **Usa nomi di chiavi descrittivi e versionati** (es. `feature_dark_mode_v2`).\n- **Non abusare dei flag**: troppi toggle attivi rendono difficile testare tutte le combinazioni.\n- **Pulisci i flag obsoleti**: una volta che una feature è stabile, rimuovi il toggle dal codice.\n- **Combina con Firebase A\u002FB Testing** per misurare l'impatto delle nuove funzionalità su metriche reali.\n\n## Conclusione\n\nFirebase Remote Config offre un modo semplice e gratuito per introdurre feature flags nelle app Flutter, disaccoppiando il rilascio del codice dall'attivazione delle funzionalità. Con pochi passaggi puoi ottenere rollout controllati, A\u002FB test e kill switch, migliorando sensibilmente la sicurezza e la flessibilità dei tuoi rilasci.","https:\u002F\u002Fflutter.it\u002Fstorage\u002Farticles\u002F6a871535-481b-4a60-90b4-3b517b32ef59.jpg",null,"published","2026-07-29T04:00:36+00:00","Feature flags in Flutter con Firebase Remote Config","Guida pratica ai feature flags in Flutter con Firebase Remote Config: attiva funzionalità da remoto, A\u002FB test e kill switch senza nuovi rilasci.",{"id":16,"name":17,"slug":18},1,"Guide","guide",{"id":16,"name":20},"Flutter Bot",[],1785306095509]