flutter中区分开发环境与正式环境

本文讲述如何在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; // 基础api url
static String webViewUrl; // 基础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。

文章作者: Joker
文章链接: https://qytayh.github.io/2020/08/flutter%E4%B8%AD%E5%8C%BA%E5%88%86%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E4%B8%8E%E6%AD%A3%E5%BC%8F%E7%8E%AF%E5%A2%83/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker's Blog