什么是多環境,為什么用多環境
配置多環境是開發經常需要用到的操作,實現多環境配置后可以規避生產測試環境混合帶來的麻煩和風險,減少項目風險。
多環境可以讓你定義一些構建配置,並根據需要進行切換。
我們開發過程中通常會有三個以上的開發環境(開發、生產、演示)。
通過多環境,我們可以給不同的開發需求使用不同的api和圖片文字等。而且只需要運行不同的命令就可以。
那我們開始寫代碼吧:
新建一個config.dart的文件,在里面進行多環境的配置。代碼如下:
import 'package:flutter/material.dart'; enum Flavor { DEVELOPMENT, RELEASE, } class Config { static Flavor appFlavor; static String get helloMessage { switch (appFlavor) { case Flavor.RELEASE: return '生產環境'; case Flavor.DEVELOPMENT: default: return '開發環境'; } } static Icon get helloIcon { switch (appFlavor) { case Flavor.RELEASE: return new Icon(Icons.new_releases); case Flavor.DEVELOPMENT: default: return new Icon(Icons.developer_mode); } } }
上面的代碼很簡單,我想應該不用解釋吧
來看看頁面my_home.dart:
import 'package:flutter/material.dart'; import 'config.dart'; class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: '多環境', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: '多環境'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ new Text( 'Hello', style: Theme .of(context) .textTheme .headline, ), new Text(Config.helloMessage, style: Theme .of(context) .textTheme .display1, ), Config.helloIcon, ], ), ), ); } }
新建兩個文件 main_dev.dart、main_uat.dart
開發環境 main_dev.dart:
import 'config.dart'; import 'my_home.dart'; void main() { Config.appFlavor = Flavor.DEVELOPMENT;
runApp(MyApp());
}
生產環境main_uat.dart:
import 'config.dart'; import 'my_home.dart'; void main() { Config.appFlavor = Flavor.RELEASE; runApp(MyApp()); }
如何使用
運行的時候指定運行哪個版本
flutter run lib/main_dev.dart
編譯也是一樣
flutter build apk lib/main_dev.dart
如果我們編譯的時候想要加上版本號可以這么寫
flutter build apk -t lib/main_uat.dart --release --build-number=2 --build-name=1.0.2
在 pub.dev中也有不少的多環境的輪子,大家也都可以看看,方法有很多,主要看個人習慣
本文項目已經上傳到 GitHub