Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2024 FlutterMTL January Meetup - Build Customiz...

2024 FlutterMTL January Meetup - Build Customization by Nicolas Cuillery

Avatar for GDG Montreal

GDG Montreal

January 18, 2024
Tweet

More Decks by GDG Montreal

Other Decks in Programming

Transcript

  1. Nicolas Cuillery Software developer Has worked with: - Flutter -

    React Native - React - Angular.js - Flex - jQuery - JSP
  2. Cloud9 application - Project started in February 2021 - Android

    and iOS - Single codebase, multiple apps - Currently in production in 10 countries - 1M daily users
  3. Multiple markets - Phase 1: Japan and Australia - Phase

    2: Mexico, UK and New Zealand - Phase 3: Korea and Taiwan - Quarterly releases: France, Spain, Sweden, Iceland
  4. Multiple applications com.cloud9.uat com.cloud9.qa com.cloud9.preprod com.cloud9.japan com.cloud9.uk com.cloud9.mexico com.cloud9.australia Cloud9

    code base cloud9-prod-australia cloud9-prod-mexico cloud9-prod-japan cloud9-prod-uk etc… cloud9-dev-shared cloud9-dev-uat cloud9-dev-qa cloud9-dev-preprod
  5. Non-prod applications Country selector screen on startup - Ease dev

    and QA workflow - Faster CI build = faster feedback loop - Cheaper CI
  6. New requirements - Different dependencies for China - Alternatives for

    the Firebase products: - Remote Config - Cloud Messaging - Analytics - …
  7. Nice-to-have goals - The unused deps are not compiled nor

    packaged in the app. - no Firebase deps in the app for China - no WeChat Pay in the UK build - Dev and tester experience preserved - “China” available in the country selector - Minimal impact in the dev workflow
  8. Arsenal: Layered Architecture 🚀 Separation between: - Data - Business

    Logic - UI More about that on: https://www.reddit.com/r/FlutterDev/comments/192h8l0/comment/kh3sm2w/
  9. - Centralize all the Firebase usage in one place (per

    Firebase Product) - Abstraction layer between the Firebase SDK and its usages - Specific main file for China, loading the non-Firebase implementation Draft of a solution
  10. Dev and tester experience preserved Previously (non-prod) Entry point initGlobalSingletons()

    {} InitializationHelper main() {} in main.dart Country Selector initCountrySingletons() {} Home Page InitializationHelper Splash screen setCountry() {} SettingsService
  11. Now (non-prod) Entry point initGlobalSingletons() {} InitializationHelperImpl main() {} in

    main.dart Country Selector initCountrySingletons() {} Home Page InitializationHelper Splash screen setCountry() {} SettingsService initCountrySingletons() {} initCountrySingletons() {} InitializationHelperChinaImpl InitializationHelperProdImpl
  12. Strip Flutter plugins - Native changes abstracted by Flutter -

    Manual changes in the native files kept as minimal as possible - pubspec.yaml is the main source of truth Non-prod Include all plugins (Firebase + the alternatives) China Strip the Firebase plugins Other countries Strip the chinese dependencies
  13. Native changes Less hack-y because we are in the native

    world Access to the flavor/configuration 🎉