Flutter环境变量管理插件package_flutter_env的使用
Flutter环境变量管理插件package_flutter_env的使用
特性
- 动态管理环境变量:支持在运行时动态加载和切换不同的环境变量。
- 多环境支持:支持开发、测试、生产等多个环境配置。
- 简单易用:通过简单的API即可实现对环境变量的管理。
开始使用
要开始使用该插件,请确保已经安装了package_flutter_env
。可以通过以下命令将其添加到您的pubspec.yaml
文件中:
dependencies:
package_flutter_env: ^1.0.0
然后执行以下命令以获取依赖项:
flutter pub get
使用方法
1. 导入包
首先,在您的main.dart
文件中导入package_flutter_env
:
import 'package:flutter/material.dart';
import 'package:package_flutter_env/package_flutter_env.dart';
2. 初始化环境变量
在应用启动时,初始化环境变量。可以使用MIEnvConfig
类来定义不同环境的配置。例如:
void main() async {
// 初始化环境变量
await MIEnvConfig.init({
'development': {'baseUrl': 'https://dev.api.example.com'},
'production': {'baseUrl': 'https://api.example.com'}
}, defaultEnv: 'development');
runApp(const MyApp());
}
上述代码定义了两个环境(development
和production
),并设置了默认环境为development
。
3. 在应用中使用环境变量
可以在任何地方通过MIEnvConfig.currentEnv
访问当前环境的变量。例如:
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
在MyHomePage
中使用环境变量:
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: MIAppBarWidget(
automaticallyImplyLeading: true,
title: const Text(
"MI AppBar",
style: TextStyle(color: Colors.white),
),
toolbarHeight: 56,
leadingWidth: 50,
centerTitle: true,
backgroundColor: Colors.blue,
statusBarColor: Colors.blueGrey,
elevation: 10,
shadowColor: Colors.black,
//sideMargin: 10,
shapeBorder: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
),
onBackButtonTapped: (BuildContext context) {},
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
Text(
'Current Base URL: ${MIEnvConfig.currentEnv['baseUrl']}', // 使用环境变量
style: Theme.of(context).textTheme.bodyLarge,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
完整示例代码
以下是完整的示例代码,展示如何在Flutter应用中使用package_flutter_env
管理环境变量:
// example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:package_flutter_env/package_flutter_env.dart';
void main() async {
// 初始化环境变量
await MIEnvConfig.init({
'development': {'baseUrl': 'https://dev.api.example.com'},
'production': {'baseUrl': 'https://api.example.com'}
}, defaultEnv: 'development');
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: MIAppBarWidget(
automaticallyImplyLeading: true,
title: const Text(
"MI AppBar",
style: TextStyle(color: Colors.white),
),
toolbarHeight: 56,
leadingWidth: 50,
centerTitle: true,
backgroundColor: Colors.blue,
statusBarColor: Colors.blueGrey,
elevation: 10,
shadowColor: Colors.black,
//sideMargin: 10,
shapeBorder: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
),
onBackButtonTapped: (BuildContext context) {},
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
Text(
'Current Base URL: ${MIEnvConfig.currentEnv['baseUrl']}', // 使用环境变量
style: Theme.of(context).textTheme.bodyLarge,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter环境变量管理插件package_flutter_env的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
package_flutter_env
是一个用于管理 Flutter 应用环境变量的插件。它允许你在不同的环境(如开发、测试、生产)中轻松切换和管理环境变量。以下是如何使用 package_flutter_env
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 package_flutter_env
插件的依赖:
dependencies:
flutter:
sdk: flutter
package_flutter_env: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 创建环境配置文件
在项目的根目录下创建一个 env
文件夹,并在其中创建不同的环境配置文件,例如:
env/dev.env
env/staging.env
env/prod.env
每个 .env
文件可以包含键值对,例如:
# dev.env
API_URL=https://dev.api.example.com
DEBUG=true
# staging.env
API_URL=https://staging.api.example.com
DEBUG=false
# prod.env
API_URL=https://api.example.com
DEBUG=false
3. 初始化环境变量
在 lib/main.dart
文件中初始化环境变量。你可以根据当前环境加载相应的 .env
文件。
import 'package:flutter/material.dart';
import 'package:package_flutter_env/package_flutter_env.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 加载环境变量
await FlutterEnv.load(envPath: 'env/dev.env'); // 根据环境选择不同的文件
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Env Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Env Demo'),
),
body: Center(
child: Text('API URL: ${FlutterEnv.get('API_URL')}'),
),
),
);
}
}
4. 使用环境变量
你可以通过 FlutterEnv.get('KEY')
来获取环境变量中的值。例如:
String apiUrl = FlutterEnv.get('API_URL');
bool debug = FlutterEnv.get('DEBUG') == 'true';
5. 切换环境
在开发过程中,你可以通过更改 FlutterEnv.load
中的 envPath
来切换不同的环境。例如,在发布应用时,你可以加载 prod.env
文件:
await FlutterEnv.load(envPath: 'env/prod.env');