本文讲述如何在flutter中区分开开发环境以及正式环境中接口地址等相关信息。
准备工作
首先我们已经有了一个flutter项目,创建一个新文件用来保存所有环境特定配置信息lib/app_config.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import 'package:flutter/material.dart'; import 'package:meta/meta.dart';
class ENV extends InheritedWidget { static String appName; static String envName; static String baseUrl; static String webViewUrl; ENV({ @required String appName, @required String envName, @required String baseUrl, @required Widget child, @required String webViewUrl }) : super(child: child){ ENV.appName = appName; ENV.envName = envName; ENV.baseUrl = baseUrl; ENV.webViewUrl = webViewUrl; }
static ENV of(BuildContext context) { return context.dependOnInheritedWidgetOfExactType(aspect: ENV); }
@override bool updateShouldNotify(InheritedWidget oldWidget) => false; }
|
区分环境配置
新建main_dev.dart
,并编写开发环境的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import 'package:flutter/material.dart'; import 'app_config.dart'; import 'main.dart';
void main() { var configuredApp = new ENV( appName: '项目名dev', envName: 'development', baseUrl: '开发环境接口地址', child: new App(), webViewUrl:'开发环境webview地址' ); runApp(configuredApp); }
|
于此同时,创建main_pro.dart
,编写对应的正式环境配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import 'package:flutter/material.dart'; import 'app_config.dart'; import 'main.dart';
void main() { var configuredApp = new ENV( appName: '项目名', envName: 'product', baseUrl: '正式环境接口地址', child: new App(), webViewUrl:'正式环境webview地址' ); runApp(configuredApp); }
|
使用
修改dio.dart
中baseurl的获取方式
1 2 3 4
| import 'package:zzc_app/app_config.dart'; ... String BASE_URL = ENV.baseUrl + url; ...
|
dio的封装可以看这篇->在flutter中优雅的封装网络请求
编译
运行开发版本,采用flutter run -t lib/main_dev.dart
运行生产版本,采用flutter run -t lib/main_pro.dart
Android上创建一个release版本,采用flutter build apk -t lib/main_<environment>.dart
我们将为不同的环境生成对应的APK。 要在iOS上构建版本,只需将apk替换为ios。