什么是多环境,为什么用多环境
配置多环境是开发经常需要用到的操作,实现多环境配置后可以规避生产测试环境混合带来的麻烦和风险,减少项目风险。
多环境可以让你定义一些构建配置,并根据需要进行切换。
我们开发过程中通常会有三个以上的开发环境(开发、生产、演示)。
通过多环境,我们可以给不同的开发需求使用不同的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