createDarkSplashImageDrawable function
Implementation
Future<void> createDarkSplashImageDrawable({
String? darkImage,
String? color,
String? gravity,
String? darkBackgroundImageSource,
String? backgroundImageGravity,
}) async {
if (darkImage == null && darkBackgroundImageSource == null && color == null) {
return;
}
// Verify dark image exists if provided
if (darkImage != null && !await File(darkImage).exists()) {
throw SplashMasterException(
message: 'Dark splash image not found at $darkImage.');
}
const androidDrawableFolder = CmdStrings.androidDrawableDarkDirectory;
const splashImagePath =
'$androidDrawableFolder/${AndroidStrings.splashScreenDarkXml}';
final file = File(splashImagePath);
final xml = await file.create(recursive: true);
final builder = XmlBuilder();
builder.processing(AndroidStrings.xml, AndroidStrings.xmlVersion);
/// Creating a layer-list element and its attributes
builder.element(AndroidStrings.layerListElement, nest: () {
builder.attribute(
AndroidStrings.xmlnsAndroidAttr,
AndroidStrings.xmlnsAndroidAttrValue,
);
/// Creates item element and attributes for color
if (color != null) {
builder.element(
AndroidStrings.itemElement,
nest: () {
builder.attribute(
AndroidStrings.androidDrawableAttr,
AndroidStrings.androidDrawableAttrVal,
);
},
);
}
/// Creates item element and attributes for dark background image
if (darkBackgroundImageSource != null) {
builder.element(AndroidStrings.itemElement, nest: () {
builder.element(AndroidStrings.bitmapAttrVal, nest: () {
builder.attribute(
AndroidStrings.androidGravityAttr,
backgroundImageGravity ??
AndroidStrings.defaultAndroidGravityAttrVal,
);
builder.attribute(
AndroidStrings.androidSrcAttr,
AndroidStrings.androidDarkBackgroundSrcAttrVal,
);
builder.attribute(
AndroidStrings.androidTileModeAttr,
AndroidStrings.androidTileModeAttrVal,
);
});
});
}
/// Creates item element and attributes for image (only if dark image exists)
if (darkImage != null) {
builder.element(AndroidStrings.itemElement, nest: () {
builder.element(AndroidStrings.bitmapAttrVal, nest: () {
builder.attribute(
AndroidStrings.androidGravityAttr,
gravity ?? AndroidStrings.defaultAndroidGravityAttrVal,
);
builder.attribute(
AndroidStrings.androidSrcAttr,
AndroidStrings.androidDarkSrcAttrVal,
);
builder.attribute(
AndroidStrings.androidTileModeAttr,
AndroidStrings.androidTileModeAttrVal,
);
});
});
}
});
final document = builder.buildDocument();
await xml.writeAsString(document.toXmlString(pretty: true));
}