@@ -3,7 +3,9 @@ import 'dart:io';
33import 'package:cli_util/cli_logging.dart' ;
44import 'package:collection/collection.dart' ;
55import 'package:path/path.dart' as path;
6+ import 'package:pub_semver/pub_semver.dart' ;
67import 'package:yaml/yaml.dart' ;
8+
79import '../common/strings.dart' ;
810import '../common/utils.dart' ;
911import '../flutter_app.dart' ;
@@ -1104,14 +1106,41 @@ AndroidGradleContents _applyFirebaseAndroidPluginKts({
11041106
11051107Future <FirebasePubSpecModel > getFirebaseCorePubSpec () async {
11061108 try {
1109+ const packageName = 'firebase_core-' ;
11071110 final pubCacheFolder = _getPubCacheDirectory ();
11081111 final items = pubCacheFolder.listSync ();
1109- final firebaseCoreDirectory = items
1112+ final firebaseCoreItems = items
1113+ // Take only folders
11101114 .whereType <Directory >()
1111- .where ((e) => e.path.split ('/' ).last.startsWith ('firebase_core-' ))
1112- .sortedBy ((d) => d.path)
1113- .last;
1115+ // Take only folders from firebase_core package
1116+ .where (
1117+ (e) => e.uri.pathSegments
1118+ .where ((p) => p.isNotEmpty)
1119+ .last
1120+ .startsWith (packageName),
1121+ )
1122+ // Sort by version
1123+ .sorted (
1124+ (a, b) {
1125+ final aVersion = Version .parse (
1126+ a.uri.pathSegments
1127+ .where ((p) => p.isNotEmpty)
1128+ .last
1129+ .replaceFirst (packageName, '' ),
1130+ );
1131+
1132+ final bVersion = Version .parse (
1133+ b.uri.pathSegments
1134+ .where ((p) => p.isNotEmpty)
1135+ .last
1136+ .replaceFirst (packageName, '' ),
1137+ );
1138+
1139+ return aVersion.compareTo (bVersion);
1140+ },
1141+ );
11141142
1143+ final firebaseCoreDirectory = firebaseCoreItems.last;
11151144 final firebaseCorePubspecFile =
11161145 pubspecPathForDirectory (firebaseCoreDirectory);
11171146 final content = await File (firebaseCorePubspecFile).readAsString ();
0 commit comments