@@ -25,26 +25,34 @@ class InstallCommand extends Command<void> {
2525
2626 late Options options;
2727
28- bool get debug => options.debug;
28+ late Pubspec pubspec;
29+ late final debug = options.debug;
30+ late final flavor = options.flavor! ;
31+ late final force = options.force; // not used!?!
32+ late final targetOsType = options.targetOsType! ;
2933
3034 InstallCommand () {
31- populateOptionsParser (argParser);
35+ pubspec = parsePubspec (File ('pubspec.yaml' ));
36+ final defaultFlavor = pubspec.dependencies['flutter' ] == null ? Flavor .dart : Flavor .flutter; // default depends on project type
37+ populateOptionsParser (
38+ argParser,
39+ targetOsTypeDefaultOverride: Platform .operatingSystem.asTargetOsType,
40+ flavorDefaultOverride: defaultFlavor,
41+ );
3242 }
3343
34- Directory getBinaryPath (Directory realmPackagePath, {required bool isFlutter}) {
35- if (isFlutter) {
36- final root = realmPackagePath.path;
37- return Directory (switch (options.targetOsType) {
38- TargetOsType .android => path.join (root, 'android' , 'src' , 'main' , 'cpp' , 'lib' ),
39- TargetOsType .ios => path.join (root, 'ios' ),
40- TargetOsType .macos => path.join (root, 'macos' ),
41- TargetOsType .linux => path.join (root, 'linux' , 'binary' , 'linux' ),
42- TargetOsType .windows => path.join (root, 'windows' , 'binary' , 'windows' ),
43- _ => throw Exception ('Unsupported target OS type for Flutter: ${options .targetOsType }' )
44- });
45- }
46- // TODO: Should binaries not go into package also for Dart?
47- return Directory (path.join (Directory .current.absolute.path, 'binary' , options.targetOsType! .name));
44+ Directory getBinaryPath (Directory realmPackagePath, Flavor flavor) {
45+ final root = realmPackagePath.path;
46+ return switch (flavor) {
47+ Flavor .dart => Directory (path.join (root, 'binary' , targetOsType.name)),
48+ Flavor .flutter => Directory (switch (targetOsType) {
49+ TargetOsType .android => path.join (root, 'android' , 'src' , 'main' , 'cpp' , 'lib' ),
50+ TargetOsType .ios => path.join (root, 'ios' ),
51+ TargetOsType .macos => path.join (root, 'macos' ),
52+ TargetOsType .linux => path.join (root, 'linux' , 'binary' , 'linux' ),
53+ TargetOsType .windows => path.join (root, 'windows' , 'binary' , 'windows' ),
54+ }),
55+ };
4856 }
4957
5058 Future <bool > shouldSkipDownload (String binariesPath, String expectedVersion) async {
@@ -105,31 +113,29 @@ class InstallCommand extends Command<void> {
105113 if (packageConfig == null ) {
106114 abort ('Run `dart pub get`' );
107115 }
108- final package = packageConfig.packages. where ((p) => p. name == name).singleOrNull ;
116+ final package = packageConfig[ name] ;
109117 if (package == null ) {
110118 abort ('$name package not found in dependencies. Add $name package to your pubspec.yaml' );
111119 }
112120 return Directory .fromUri (package.root);
113121 }
114122
115- Future < Pubspec > parsePubspec (File file) async {
123+ Pubspec parsePubspec (File file) {
116124 try {
117- return Pubspec .parse (await file.readAsString (), sourceUrl: file.uri);
118- } on Exception catch (e) {
119- throw Exception ('Error parsing package pubspec at ${file .parent }. Error $e ' );
125+ return Pubspec .parse (file.readAsStringSync (), sourceUrl: file.uri);
126+ } catch (e) {
127+ abort ('Error parsing package pubspec at ${file .parent }. Error $e ' );
120128 }
121129 }
122130
123131 @override
124132 FutureOr <void > run () async {
125- final pubspec = await parsePubspec (File ('pubspec.yaml' ));
126- final flavor = pubspec.dependencies['flutter' ] == null ? Flavor .dart : Flavor .flutter;
127-
128133 options = parseOptionsResult (argResults! );
129- validateOptions (flavor);
130134
131135 final flavorName = flavor.packageName;
132136 final realmDependency = pubspec.dependencyOverrides[flavorName] ?? pubspec.dependencies[flavorName];
137+ print (pubspec.dependencyOverrides.values.join ('\n ' ));
138+ print (realmDependency);
133139 if (realmDependency is PathDependency ) {
134140 print ('Path dependency for $flavorName found. Skipping install of native lib (assuming local development)' );
135141 return ;
@@ -140,26 +146,16 @@ class InstallCommand extends Command<void> {
140146 }
141147
142148 final realmPackagePath = await getPackagePath (flavorName);
143- final realmPubspec = await parsePubspec (File (path.join (realmPackagePath.path, "pubspec.yaml" )));
149+ final realmPubspec = parsePubspec (File (path.join (realmPackagePath.path, "pubspec.yaml" )));
144150
145- final binaryPath = getBinaryPath (realmPackagePath, isFlutter : flavor == Flavor .flutter );
151+ final binaryPath = getBinaryPath (realmPackagePath, flavor);
146152 print (binaryPath);
147- final archiveName = '${options . targetOsType ! .name }.tar.gz' ;
153+ final archiveName = '${targetOsType .name }.tar.gz' ;
148154 await downloadAndExtractBinaries (binaryPath, realmPubspec.version! , archiveName);
149155
150156 print ('Realm install command finished.' );
151157 }
152158
153- void validateOptions (Flavor flavor) {
154- final targetOs = flavor == Flavor .dart ? getTargetOS () : options.targetOsType;
155- if (targetOs == null ) {
156- abort ('Target OS not specified' );
157- }
158- options.targetOsType = targetOs;
159- }
160-
161- TargetOsType getTargetOS () => Platform .operatingSystem.asTargetOsType ?? (throw UnsupportedError ('Unsupported platform ${Platform .operatingSystem }' ));
162-
163159 Never abort (String error) {
164160 print (error);
165161 print (usage);
0 commit comments