-
Notifications
You must be signed in to change notification settings - Fork 387
/
icon_generator.dart
90 lines (80 loc) · 2.54 KB
/
icon_generator.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import 'dart:io';
import 'package:flutter_launcher_icons/flutter_launcher_icons_config.dart';
import 'package:flutter_launcher_icons/logger.dart';
/// A base class to generate icons
abstract class IconGenerator {
final IconGeneratorContext context;
final String platformName;
IconGenerator(this.context, this.platformName);
/// Creates icons for this platform.
void createIcons();
/// Should return `true` if this platform
/// has all the requirments to create icons.
/// This runs before to [createIcons]
bool validateRequirments();
}
/// Provides easy access to user arguments and configuration
class IconGeneratorContext {
/// Contains configuration from configuration file
final FlutterLauncherIconsConfig config;
final FLILogger logger;
final String? flavor;
final String prefixPath;
IconGeneratorContext({
required this.config,
this.flavor,
required this.prefixPath,
required this.logger,
});
/// Shortcut for `config.webConfig`
WebConfig? get webConfig => config.webConfig;
}
/// Generates Icon for given platforms
void generateIconsFor({
required FlutterLauncherIconsConfig config,
required String? flavor,
required String prefixPath,
required FLILogger logger,
required List<IconGenerator> Function(IconGeneratorContext context) platforms,
}) {
try {
final platformList = platforms(IconGeneratorContext(
config: config,
logger: logger,
prefixPath: prefixPath,
flavor: flavor,
));
if (platformList.isEmpty) {
// ? maybe we can print help
logger.info('No platform provided');
}
for (final platform in platformList) {
final progress = logger.progress('Creating Icons for ${platform.platformName}');
logger.verbose('Validating platform requirments for ${platform.platformName}');
// in case a platform throws an exception it should not effect other platforms
try {
if (!platform.validateRequirments()) {
logger.error('Requirments failed for platform ${platform.platformName}. Skipped');
progress.cancel();
continue;
}
platform.createIcons();
progress.finish(message: 'done', showTiming: true);
} catch (e, st) {
progress.cancel();
logger
..error(e.toString())
..verbose(st);
continue;
}
}
} catch (e, st) {
// todo: better error handling
// stacktrace should only print when verbose is turned on
// else a normal help line
logger
..error(e.toString())
..verbose(st);
exit(1);
}
}