Hi, 我是魚板伯爵今天要教大家如何初始化 Environment,在未來的開發的過程中可以快速又方便的切換環境,教學內容只會擷取片段程式碼,建議大家搭配完整程式碼來練習。
環境設定可以使開發的時候很方便的切換設定,通常會有開發、測試和產品三個狀態,每一個狀態中的參數將會對應不同狀態而不同,而我們可以預先設定好檔案,當重新載入時就可以切換狀態。
在專案層中創建一個設置參數的json
檔案,並在pubspec.yaml
中設定assets
的資料夾路徑。
assets:
- assets/config/
設定每個狀態的名稱,在開發時可以切換,而且還可以避免打錯字的問題。
class Environment {
/// name of the environment
final String name;
/// default constructor
const Environment(this.name);
/// preset of common env name 'dev'
static const String dev = 'development';
/// preset of common env name 'prod'
static const String prod = 'production';
/// preset of common env name 'test'
static const String test = 'testing';
}
讀取剛剛設定好的參數檔案,而參數則會根據不同的Environment
來獲取。
import 'package:flutter/services.dart';
import 'dart:convert';
import 'dart:async';
import 'config_model.dart';
class ConfigReader {
static ConfigModel _config =
ConfigModel(API_HOST: "API_HOST", DEBUG: false, TESTING: false);
static Future<void> initializeApp(String? env) async {
env = env ?? "development";
String configString = await rootBundle.loadString('assets/config/env.json');
final jsonMap = json.decode(configString);
_config = ConfigModel.fromMap(jsonMap[env]);
}
static ConfigModel config() {
return _config;
}
}
調用WidgetsFlutterBinding.ensureInitialized()
,來實現初始元件的綁定,接著就可以初始環境設定了。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await ConfigReader.initializeApp(Environment.prod);
}
你可以試著切換不同的Environment,然後按下重新載入就可以看到Debug繃帶的變化了。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: ConfigReader.config().DEBUG,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Home(),
);
}
}