1.环境隔离
开发肯定面临各种环境的隔离,网上说了多个启动main文件,这样的话每次要维护多个main文件太不优雅,下面是采用了启动命令加参数的方式来隔离环境,以便后续扩展各种环境和自动化部署。 `
/*
* App入口
* */
void main() async {
/// 确保初始化
WidgetsFlutterBinding.ensureInitialized();
/// sp初始化
await SpUtil.getInstance();
//获取命令行参数
const version = String.fromEnvironment("version");
Constant.versionNumber = version;
switch(version){
case 'PRO':
StateEnv.env = Env.PRO;
break;
case 'DEV':
StateEnv.env = Env.DEV;
break;
default:
StateEnv.env = Env.DEV;
break;
}
/// App入口
runApp(
MultiProvider(
providers: [
伪代码...
],
child: MyApp(),
),);
/// 自定义报错页面
ErrorWidget.builder = (FlutterErrorDetails flutterErrorDetails) {
debugPrint(flutterErrorDetails.toString());
return new Center(child: new Text("App错误,请联系技术人员!"));
};
/// Android状态栏透明
if (Platform.isAndroid) {
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarBrightness: Brightness.light,
);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
}
根据 String.fromEnvironment("version") 获取启动命令的参数,动态隔离环境, 启动命令:
flutter run -t lib/main.dart --dart-define=version=DEV
多个启动命令可以逗号隔开
--dart-define=version=DEV,city=xxx
这样的话,整个项目的环境隔离取决于启动命令,只要维护一份main.dart就可以了,另外可以再jenkins自动部署上启动命令加入动态参数,有利于维护。
2.自动部署
jenkins可以设置 Build with Parameters 将环境参数用于构建项目:version:xxx 这样的话,可以利用jenkins的web api 自己在web端发起构建请求,将环境参数带入请求动态部署所需的环境打包,我结合了打包成功自动上传云储的功能,这样自己构建web管理页面,将flutter打包部署集成一套api管理,方便开发测试上线流程化管理。
至于linux下flutter打包环境的安装,后续如有需要再分享,或者自己查一下应该就可以了。