Setting environment variables in Flutter

后端 未结 4 1610
野趣味
野趣味 2020-12-16 09:24

For example, building a client for an API, like Twitch.

In a Dart CLI binary, I could use a generic environment variable, or a Dart definition variable. For example,

相关标签:
4条回答
  • 2020-12-16 10:01

    Since I was trying to solve this as well and encountered this thread I just wanted to add this for people looking for a solution in the future... If all you're looking for is PROD/DEV environments there is now a supported way of getting if the app is in production or not:

    const bool isProduction = bool.fromEnvironment('dart.vm.product');
    

    As suggested by:

    https://twitter.com/FlutterDev/status/1048278525432791041

    https://github.com/flutter/flutter/issues/4014

    0 讨论(0)
  • 2020-12-16 10:10

    Create a class:

    import 'package:flutter/foundation.dart';
    
    class AppUtils {
      static String get clientId {
        if (kDebugMode) return 'debug_id';
        else if (kProfileMode) return 'profile_id';
        else if (kReleaseMode) return 'production_id';
        else if (kIsWeb) return 'web_mode_id';
        
        throw ArgumentError('No mode detected');
      }
    }
    

    Usage:

    var id = AppUtils.clientId;
    
    0 讨论(0)
  • 2020-12-16 10:18

    Starting from Flutter 1.17 you can define compile-time variables if you want to.

    To do so just use --dart-define argument during flutter run or flutter build

    If you need to pass multiple key-value pairs, just define --dart-define multiple times:

    flutter run --dart-define=SOME_VAR=SOME_VALUE --dart-define=OTHER_VAR=OTHER_VALUE

    and then, anywhere in your code you can use them like:

    const SOME_VAR = String.fromEnvironment('SOME_VAR', defaultValue: 'SOME_DEFAULT_VALUE');
    const OTHER_VAR = String.fromEnvironment('OTHER_VAR' defaultValue: 'OTHER_DEFAULT_VALUE');
    

    Also, they can be used in native layers too.

    If something - here is an article that explains more

    0 讨论(0)
  • 2020-12-16 10:18

    For configuration a common pattern I've seen is to use separate main files instead. i.e.

    flutter run -t lib/production_main.dart

    and

    flutter build apk -t lib/debug_main.dart

    And then in those different main files set up the configurations desired.

    In terms of reading ids, you can do that from arbitrary assets https://flutter.io/assets-and-images/.

    I believe it is possible in Flutter to read from the environment as you suggest, however I don't know how to set those environment variables on iOS or Android.

    0 讨论(0)
提交回复
热议问题