build static method
Construct a new CronetEngine with the given configuration.
cacheMode controls the type of caching that should be used by the
engine. If cacheMode is not CacheMode.disabled then cacheMaxSize
must be set. If cacheMode is CacheMode.disk or CacheMode.diskNoHttp
then storagePath must be set.
cacheMaxSize is the maximum amount of data that should be cached, in
bytes.
enableBrotli controls whether
Brotli compression can be used.
enableHttp2 controls whether the HTTP/2 protocol can be used.
enablePublicKeyPinningBypassForLocalTrustAnchors enables or disables
public key pinning bypass for local trust anchors. Disabling the bypass
for local trust anchors is highly discouraged since it may prohibit the
app from communicating with the pinned hosts. E.g., a user may want to
send all traffic through an SSL enabled proxy by changing the device
proxy settings and adding the proxy certificate to the list of local
trust anchor.
enableQuic controls whether the QUIC
protocol can be used.
storagePath sets the path of an existing directory where HTTP data can
be cached and where cookies can be stored. NOTE: a unique storagePath
should be used per CronetEngine.
userAgent controls the User-Agent header.
Implementation
static CronetEngine build(
{CacheMode? cacheMode,
int? cacheMaxSize,
bool? enableBrotli,
bool? enableHttp2,
bool? enablePublicKeyPinningBypassForLocalTrustAnchors,
bool? enableQuic,
String? storagePath,
String? userAgent}) {
final builder = jb.CronetEngine_Builder(
JObject.fromRef(Jni.getCachedApplicationContext()));
try {
if (storagePath != null) {
builder.setStoragePath(storagePath.toJString());
}
if (cacheMode == CacheMode.disabled) {
builder.enableHttpCache(0, 0); // HTTP_CACHE_DISABLED, 0 bytes
} else if (cacheMode != null && cacheMaxSize != null) {
builder.enableHttpCache(cacheMode.index, cacheMaxSize);
}
if (enableBrotli != null) {
builder.enableBrotli(enableBrotli);
}
if (enableHttp2 != null) {
builder.enableHttp2(enableHttp2);
}
if (enablePublicKeyPinningBypassForLocalTrustAnchors != null) {
builder.enablePublicKeyPinningBypassForLocalTrustAnchors(
enablePublicKeyPinningBypassForLocalTrustAnchors);
}
if (enableQuic != null) {
builder.enableQuic(enableQuic);
}
if (userAgent != null) {
builder.setUserAgent(userAgent.toJString());
}
return CronetEngine._(builder.build());
} on JniException catch (e) {
// TODO: Decode this exception in a better way when
// https://github.com/dart-lang/jnigen/issues/239 is fixed.
if (e.message.contains('java.lang.IllegalArgumentException:')) {
throw ArgumentError(
e.message.split('java.lang.IllegalArgumentException:').last);
}
rethrow;
}
}