Feature #2: Fluttery Framework - Base Essentials #7
27
finlog_app/fluttery/lib/environment.dart
Normal file
27
finlog_app/fluttery/lib/environment.dart
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import 'package:fluttery/fluttery.dart';
|
||||||
|
|
||||||
|
/// Abstract Environment contract
|
||||||
|
abstract class Environment extends Service {
|
||||||
|
/// Platform checks
|
||||||
|
bool get isAndroid;
|
||||||
|
|
||||||
|
bool get isIOS;
|
||||||
|
|
||||||
|
/// Build mode
|
||||||
|
bool get isDebug;
|
||||||
|
|
||||||
|
bool get isRelease;
|
||||||
|
|
||||||
|
bool get isProfile;
|
||||||
|
|
||||||
|
/// App info
|
||||||
|
Future<void> loadPackageInfo();
|
||||||
|
|
||||||
|
String get appName;
|
||||||
|
|
||||||
|
String get packageName;
|
||||||
|
|
||||||
|
String get version;
|
||||||
|
|
||||||
|
String get buildNumber;
|
||||||
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
library;
|
library;
|
||||||
|
|
||||||
|
import 'package:fluttery/environment.dart';
|
||||||
import 'package:fluttery/logger.dart';
|
import 'package:fluttery/logger.dart';
|
||||||
import 'package:fluttery/preferences.dart';
|
import 'package:fluttery/preferences.dart';
|
||||||
import 'package:fluttery/secure_storage.dart';
|
import 'package:fluttery/secure_storage.dart';
|
||||||
import 'package:fluttery/src/logger/logger_impl.dart';
|
import 'package:fluttery/src/logger/logger_impl.dart';
|
||||||
import 'package:fluttery/src/preferences/preferences_impl.dart';
|
import 'package:fluttery/src/preferences/preferences_impl.dart';
|
||||||
import 'package:fluttery/src/storage/secure/secure_storage_impl.dart';
|
import 'package:fluttery/src/storage/secure/secure_storage_impl.dart';
|
||||||
|
import 'package:fluttery/src/system/environment/environment_impl.dart';
|
||||||
import 'package:fluttery/src/system/worker/worker_impl.dart';
|
import 'package:fluttery/src/system/worker/worker_impl.dart';
|
||||||
import 'package:fluttery/worker.dart';
|
import 'package:fluttery/worker.dart';
|
||||||
import 'package:kiwi/kiwi.dart';
|
import 'package:kiwi/kiwi.dart';
|
||||||
@@ -34,6 +36,7 @@ class App {
|
|||||||
static void registerDefaultServices() {
|
static void registerDefaultServices() {
|
||||||
registerService<Logger>(() => LoggerImpl());
|
registerService<Logger>(() => LoggerImpl());
|
||||||
registerService<Preferences>(() => PreferencesImpl());
|
registerService<Preferences>(() => PreferencesImpl());
|
||||||
|
registerService<Environment>(() => EnvironmentImpl());
|
||||||
registerService<SecureStorage>(() => SecureStorageImpl());
|
registerService<SecureStorage>(() => SecureStorageImpl());
|
||||||
registerService<Worker>(() => WorkerImpl());
|
registerService<Worker>(() => WorkerImpl());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import 'dart:io' show Platform;
|
||||||
|
import 'package:flutter/foundation.dart'
|
||||||
|
show kDebugMode, kReleaseMode, kProfileMode;
|
||||||
|
|
||||||
|
import 'package:fluttery/environment.dart';
|
||||||
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
|
||||||
|
class EnvironmentImpl implements Environment {
|
||||||
|
PackageInfo? _packageInfo;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isAndroid => Platform.isAndroid;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isIOS => Platform.isIOS;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> loadPackageInfo() async {
|
||||||
|
_packageInfo = await PackageInfo.fromPlatform();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get appName => _packageInfo?.appName ?? 'Unknown';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get packageName => _packageInfo?.packageName ?? 'Unknown';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get version => _packageInfo?.version ?? '0.0.0';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get buildNumber => _packageInfo?.buildNumber ?? '0';
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isDebug => kDebugMode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isRelease => kReleaseMode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isProfile => kProfileMode;
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ dependencies:
|
|||||||
kiwi: ^5.0.1
|
kiwi: ^5.0.1
|
||||||
logging: ^1.3.0
|
logging: ^1.3.0
|
||||||
mocktail: ^1.0.4
|
mocktail: ^1.0.4
|
||||||
|
package_info_plus: ^9.0.0
|
||||||
shared_preferences: ^2.5.3
|
shared_preferences: ^2.5.3
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
import 'dart:io' show Platform;
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:fluttery/src/system/environment/environment_impl.dart';
|
||||||
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
setUp(() {
|
||||||
|
PackageInfo.setMockInitialValues(
|
||||||
|
appName: 'Test App',
|
||||||
|
packageName: 'com.example.testapp',
|
||||||
|
version: '1.2.3',
|
||||||
|
buildNumber: '42',
|
||||||
|
buildSignature: 'mock-signature',
|
||||||
|
installerStore: 'mock-store',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
group('EnvironmentImpl', () {
|
||||||
|
test('defaults before loadPackageInfo()', () {
|
||||||
|
final env = EnvironmentImpl();
|
||||||
|
|
||||||
|
expect(env.appName, equals('Unknown'));
|
||||||
|
expect(env.packageName, equals('Unknown'));
|
||||||
|
expect(env.version, equals('0.0.0'));
|
||||||
|
expect(env.buildNumber, equals('0'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('loadPackageInfo() populates fields from PackageInfo', () async {
|
||||||
|
final env = EnvironmentImpl();
|
||||||
|
await env.loadPackageInfo();
|
||||||
|
|
||||||
|
expect(env.appName, equals('Test App'));
|
||||||
|
expect(env.packageName, equals('com.example.testapp'));
|
||||||
|
expect(env.version, equals('1.2.3'));
|
||||||
|
expect(env.buildNumber, equals('42'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('platform flags mirror dart:io Platform', () {
|
||||||
|
final env = EnvironmentImpl();
|
||||||
|
|
||||||
|
expect(env.isAndroid, equals(Platform.isAndroid));
|
||||||
|
expect(env.isIOS, equals(Platform.isIOS));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('build mode flags reflect Flutter constants', () {
|
||||||
|
final env = EnvironmentImpl();
|
||||||
|
|
||||||
|
// In unit tests, this should typically be: debug=true, release/profile=false.
|
||||||
|
expect(env.isDebug, isTrue);
|
||||||
|
expect(env.isRelease, isFalse);
|
||||||
|
expect(env.isProfile, isFalse);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user