parseUrl static method
Parse url info
Example:
const url = "https://firework.com/?ios=com.firework%3A%2F%2Fpdp%3Fproduct_id%3D1234&android=com.firework%3A%2F%2Fpdp%3Fproduct_id%3D12345";
const iOSQueryName = "ios";
const androidQueryName = "android";
final info = FWUrlUtil.parseUrl(
url: url,
iOSQueryName: iOSQueryName,
androidQueryName: androidQueryName,
);
print("${info?.url}"); // https://firework.com/
print("${info?.iOSUrl}"); // com.firework://pdp?product_id=1234
print("${info?.androidUrl}"); // com.firework://pdp?product_id=12345
Implementation
static FWUrlInfo? parseUrl({
required String url,
required String iOSQueryName,
required String androidQueryName,
}) {
if (url.isEmpty) {
return null;
}
final uri = Uri.tryParse(url);
if (uri == null) {
return null;
}
final queryParameters = uri.queryParameters;
final urlInfo = FWUrlInfo();
// Get iOS url and Android Url from query
queryParameters.forEach((key, value) {
if (key == iOSQueryName) {
urlInfo.iOSUrl = value;
}
if (key == androidQueryName) {
urlInfo.androidUrl = value;
}
});
// Remove iOS url and Android url from query
final newQueryParameters = Map.fromEntries(
queryParameters.entries.where(
(entry) => entry.key != iOSQueryName && entry.key != androidQueryName,
),
);
final resultUri = uri.replace(
queryParameters: newQueryParameters,
);
var resultUrl = resultUri.toString();
if (resultUrl.isNotEmpty && resultUrl.endsWith("?")) {
resultUrl = resultUrl.substring(0, resultUrl.length - 1);
}
urlInfo.url = resultUrl;
return urlInfo;
}