• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vanlooverenkoen / flutter_appcenter_release_manager / 3953013444

pending completion
3953013444

push

github

GitHub
Merge pull request #34 from vanlooverenkoen/aab-support

8 of 8 new or added lines in 2 files covered. (100.0%)

2 of 335 relevant lines covered (0.6%)

0.04 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/lib/src/appcenter_release_manager.dart
1
import 'package:appcenter_release_manager/src/data/exception/appcenter_release_manager_error.dart';
2
import 'package:appcenter_release_manager/src/data/webservice/app.dart';
3
import 'package:appcenter_release_manager/src/data/webservice/owner.dart';
4
import 'package:appcenter_release_manager/src/data/webservice/release.dart';
5
import 'package:appcenter_release_manager/src/data/webservice/release_details.dart';
6
import 'package:appcenter_release_manager/src/data/webservice/user.dart';
7
import 'package:appcenter_release_manager/src/repo/appcenter_repo.dart';
8
import 'package:appcenter_release_manager/src/repo/appcenter_repository.dart';
9
import 'package:appcenter_release_manager/src/webservice/webservice.dart';
10
import 'package:flutter/foundation.dart';
11
import 'package:flutter/services.dart';
12
import 'package:universal_io/io.dart';
13
import 'package:url_launcher/url_launcher.dart';
14

15
class AppCenterReleaseManager {
16
  static const _channel = MethodChannel('appcenter_release_manager');
17

18
  late AppCenterRepo _releaseRepo;
19

20
  final String apiToken;
21

22
  AppCenterReleaseManager({
×
23
    required this.apiToken,
24
  }) {
25
    if (apiToken.isEmpty) {
×
26
      throw AppCenterReleaseManagerError(message: 'apiToken is empty');
×
27
    }
28
    _releaseRepo =
×
29
        AppCenterRepository(webservice: Webservice(apiToken: apiToken));
×
30
  }
31

32
  Future<User> getUserDetails() => _releaseRepo.getUserDetails();
×
33

34
  Future<List<Owner>> getAllOrganizations() =>
×
35
      _releaseRepo.getAllOrganizations();
×
36

37
  Future<List<App>> getAllApps({String? ownerName}) =>
×
38
      _releaseRepo.getAllApps(ownerName: ownerName);
×
39

40
  Future<List<Release>> getReleases(String ownerName, String appName) =>
×
41
      _releaseRepo.getReleases(
×
42
        ownerName,
43
        appName,
44
      );
45

46
  Future<ReleaseDetail> getReleaseDetails(
×
47
          String ownerName, String appName, int id) =>
48
      _releaseRepo.getReleaseDetail(
×
49
        ownerName,
50
        appName,
51
        id,
52
      );
53

54
  Future<ReleaseDetail?> getLatestReleaseDetails(
×
55
          String ownerName, String appName) =>
56
      _releaseRepo.getLatestReleaseDetail(
×
57
        ownerName,
58
        appName,
59
      );
60

61
  Future<void> installRelease(
×
62
    ReleaseDetail releaseDetail, {
63
    bool openAndroidInstallScreen = true,
64
    bool keepAndroidNotification = false,
65
  }) async {
66
    var installUrl = releaseDetail.installUrl;
×
67
    final secondaryUrl = releaseDetail.secondaryDownloadUrl;
×
68
    if (Platform.isAndroid &&
×
69
        releaseDetail.fileExtension == 'aab' &&
×
70
        secondaryUrl != null) {
71
      installUrl = secondaryUrl;
72
    }
73
    await installReleaseByUrl(
×
74
      installUrl,
75
      appName: releaseDetail.appName,
×
76
      appVersion: '${releaseDetail.shortVersion} (${releaseDetail.version})',
×
77
      openAndroidInstallScreen: openAndroidInstallScreen,
78
      keepAndroidNotification: keepAndroidNotification,
79
    );
80
  }
81

82
  Future<void> installReleaseByUrl(
×
83
    String url, {
84
    required String appName,
85
    required String appVersion,
86
    bool openAndroidInstallScreen = true,
87
    bool keepAndroidNotification = false,
88
  }) async {
89
    if (kIsWeb || Platform.isIOS) {
×
90
      await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication);
×
91
      return;
92
    }
93
    final data = <String, dynamic>{};
×
94
    data['install_url'] = url;
×
95
    data['notification_title'] = appName;
×
96
    data['notification_description'] = appVersion;
×
97
    data['open_android_install_screen'] = openAndroidInstallScreen;
×
98
    data['keep_android_notification'] = keepAndroidNotification;
×
99

100
    await _channel.invokeMethod<void>('install_app', data);
×
101
  }
102
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc