run formatter
This commit is contained in:
@@ -52,7 +52,11 @@ class BangKey {
|
||||
trigger: trigger,
|
||||
);
|
||||
} catch (e, s) {
|
||||
logger.w('Failed to parse BangKey from string: "$key"', error: e, stackTrace: s);
|
||||
logger.w(
|
||||
'Failed to parse BangKey from string: "$key"',
|
||||
error: e,
|
||||
stackTrace: s,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,11 @@ class SelectedTab extends _$SelectedTab {
|
||||
state = tabId;
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in selected tab events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in selected tab events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -57,7 +57,11 @@ class TabList extends _$TabList {
|
||||
}
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in tab list events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in tab list events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -223,7 +223,11 @@ class TabStates extends _$TabStates {
|
||||
await _onTabContentStateChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in tab content events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in tab content events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
eventService.iconChangeEvents.listen(
|
||||
@@ -231,7 +235,11 @@ class TabStates extends _$TabStates {
|
||||
await _onIconChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in icon change events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in icon change events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
eventService.thumbnailEvents.listen(
|
||||
@@ -239,7 +247,11 @@ class TabStates extends _$TabStates {
|
||||
await _onThumbnailChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in thumbnail events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in thumbnail events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
eventService.securityInfoEvents.listen(
|
||||
@@ -247,7 +259,11 @@ class TabStates extends _$TabStates {
|
||||
_onSecurityInfoStateChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in security info events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in security info events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
eventService.historyEvents.listen(
|
||||
@@ -255,7 +271,11 @@ class TabStates extends _$TabStates {
|
||||
_onHistoryStateChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in history events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in history events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
eventService.readerableEvents.listen(
|
||||
@@ -263,7 +283,11 @@ class TabStates extends _$TabStates {
|
||||
_onReaderableStateChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in readerable events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in readerable events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
eventService.findResultsEvent
|
||||
@@ -273,7 +297,11 @@ class TabStates extends _$TabStates {
|
||||
_onFindResultsChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in find results events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in find results events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
];
|
||||
|
||||
@@ -106,7 +106,11 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
_onExtensionUpdate(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in browser extension stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in browser extension stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
addonService.browserIconStream.listen(
|
||||
@@ -114,7 +118,11 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
await _onIconChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in browser icon stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in browser icon stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
@@ -124,7 +132,11 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
_onExtensionUpdate(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in page extension stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in page extension stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
addonService.pageIconStream.listen(
|
||||
@@ -132,7 +144,11 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
await _onIconChange(event);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in page icon stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in page icon stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
@@ -436,100 +436,107 @@ class TabRepository extends _$TabRepository {
|
||||
);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in tab added stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in tab added stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
final containerSiteAssignementSub = eventSerivce.siteAssignementEvent.listen((
|
||||
event,
|
||||
) async {
|
||||
if (event.tabId != null) {
|
||||
// Prevent concurrent processing of the same tab (race condition protection)
|
||||
if (_tabsBeingProcessedForAssignment.contains(event.tabId)) {
|
||||
logger.d(
|
||||
'Skipping container assignment for tab ${event.tabId} - already being processed',
|
||||
);
|
||||
return;
|
||||
}
|
||||
final containerSiteAssignementSub = eventSerivce.siteAssignementEvent.listen(
|
||||
(event) async {
|
||||
if (event.tabId != null) {
|
||||
// Prevent concurrent processing of the same tab (race condition protection)
|
||||
if (_tabsBeingProcessedForAssignment.contains(event.tabId)) {
|
||||
logger.d(
|
||||
'Skipping container assignment for tab ${event.tabId} - already being processed',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
_tabsBeingProcessedForAssignment.add(event.tabId!);
|
||||
_tabsBeingProcessedForAssignment.add(event.tabId!);
|
||||
|
||||
// ignore: only_use_keep_alive_inside_keep_alive
|
||||
final tabState = ref.read(tabStateProvider(event.tabId));
|
||||
if (tabState != null) {
|
||||
final uri = Uri.parse(event.url);
|
||||
final originUri = event.originUrl.mapNotNull(Uri.parse);
|
||||
// ignore: only_use_keep_alive_inside_keep_alive
|
||||
final tabState = ref.read(tabStateProvider(event.tabId));
|
||||
if (tabState != null) {
|
||||
final uri = Uri.parse(event.url);
|
||||
final originUri = event.originUrl.mapNotNull(Uri.parse);
|
||||
|
||||
final targetContainerId = await ref
|
||||
.read(containerRepositoryProvider.notifier)
|
||||
.siteAssignedContainerId(Uri.parse(uri.origin));
|
||||
final containerData = await targetContainerId.mapNotNull(
|
||||
(id) => ref
|
||||
final targetContainerId = await ref
|
||||
.read(containerRepositoryProvider.notifier)
|
||||
.getContainerData(id),
|
||||
);
|
||||
.siteAssignedContainerId(Uri.parse(uri.origin));
|
||||
final containerData = await targetContainerId.mapNotNull(
|
||||
(id) => ref
|
||||
.read(containerRepositoryProvider.notifier)
|
||||
.getContainerData(id),
|
||||
);
|
||||
|
||||
if (containerData != null) {
|
||||
final tabIsEmpty =
|
||||
tabState.url == TabState.defaultUrl &&
|
||||
tabState.historyState.items.isEmpty;
|
||||
if (containerData != null) {
|
||||
final tabIsEmpty =
|
||||
tabState.url == TabState.defaultUrl &&
|
||||
tabState.historyState.items.isEmpty;
|
||||
|
||||
if (event.blocked || tabIsEmpty) {
|
||||
// Check if contextual identity is changing
|
||||
final currentContainerData = await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.getTabContainerData(tabState.id);
|
||||
if (event.blocked || tabIsEmpty) {
|
||||
// Check if contextual identity is changing
|
||||
final currentContainerData = await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.getTabContainerData(tabState.id);
|
||||
|
||||
final contextChanging =
|
||||
containerData.metadata.contextualIdentity !=
|
||||
currentContainerData?.metadata.contextualIdentity;
|
||||
final contextChanging =
|
||||
containerData.metadata.contextualIdentity !=
|
||||
currentContainerData?.metadata.contextualIdentity;
|
||||
|
||||
await addTab(
|
||||
url: uri,
|
||||
private: tabState.isPrivate,
|
||||
container: Value(containerData),
|
||||
parentId: contextChanging
|
||||
? null
|
||||
: tabState.id, // Break parent chain if context changes
|
||||
selectTab: true,
|
||||
);
|
||||
await addTab(
|
||||
url: uri,
|
||||
private: tabState.isPrivate,
|
||||
container: Value(containerData),
|
||||
parentId: contextChanging
|
||||
? null
|
||||
: tabState.id, // Break parent chain if context changes
|
||||
selectTab: true,
|
||||
);
|
||||
|
||||
if (tabIsEmpty) {
|
||||
await closeTab(tabState.id);
|
||||
}
|
||||
} else {
|
||||
final tabContainerId = await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.getTabContainerId(tabState.id);
|
||||
if (tabIsEmpty) {
|
||||
await closeTab(tabState.id);
|
||||
}
|
||||
} else {
|
||||
final tabContainerId = await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.getTabContainerId(tabState.id);
|
||||
|
||||
if (targetContainerId != tabContainerId) {
|
||||
if (originUri == null) {
|
||||
await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.assignContainer(tabState.id, containerData);
|
||||
} else if (tabState.url == originUri) {
|
||||
await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.assignContainer(
|
||||
tabState.id,
|
||||
containerData,
|
||||
closeOldTab: false,
|
||||
);
|
||||
} else {
|
||||
logger.w(
|
||||
'Could not match origin url for assignment ${tabState.url} to request ${event.originUrl}',
|
||||
);
|
||||
if (targetContainerId != tabContainerId) {
|
||||
if (originUri == null) {
|
||||
await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.assignContainer(tabState.id, containerData);
|
||||
} else if (tabState.url == originUri) {
|
||||
await ref
|
||||
.read(tabDataRepositoryProvider.notifier)
|
||||
.assignContainer(
|
||||
tabState.id,
|
||||
containerData,
|
||||
closeOldTab: false,
|
||||
);
|
||||
} else {
|
||||
logger.w(
|
||||
'Could not match origin url for assignment ${tabState.url} to request ${event.originUrl}',
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.w('Could not get tab for assignement ${tabState?.url}');
|
||||
}
|
||||
} else {
|
||||
logger.w('Could not get tab for assignement ${tabState?.url}');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in container site assignment stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in container site assignment stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -545,7 +552,11 @@ class TabRepository extends _$TabRepository {
|
||||
);
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in tab content stream', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in tab content stream',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -69,7 +69,11 @@ class EngineBoundIntentStream extends _$EngineBoundIntentStream {
|
||||
]).listen(
|
||||
controller.add,
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Intent stream error', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Intent stream error',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
controller.addError(error, stackTrace);
|
||||
},
|
||||
onDone: controller.close,
|
||||
|
||||
+3
-1
@@ -1010,7 +1010,9 @@ class NavigateBackButton extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
: null,
|
||||
icon: isLoading ? const Icon(Icons.close) : const Icon(Icons.arrow_back),
|
||||
icon: isLoading
|
||||
? const Icon(Icons.close)
|
||||
: const Icon(Icons.arrow_back),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
+3
-1
@@ -302,7 +302,9 @@ class _BrowserViewState extends ConsumerState<BrowserView>
|
||||
|
||||
await router.push(route.location);
|
||||
} else {
|
||||
throw UnimplementedError('Unknown quick action shortcut type');
|
||||
throw UnimplementedError(
|
||||
'Unknown quick action shortcut type',
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+3
-1
@@ -82,7 +82,9 @@ class _TabDraggable extends HookConsumerWidget {
|
||||
sourceSearchQuery: switch (entity) {
|
||||
DefaultTabEntity _ => null,
|
||||
final SearchResultTabEntity entity => entity.searchQuery,
|
||||
TabTreeEntity _ => throw UnimplementedError('TabTreeEntity not implemented in tab grid view'),
|
||||
TabTreeEntity _ => throw UnimplementedError(
|
||||
'TabTreeEntity not implemented in tab grid view',
|
||||
),
|
||||
},
|
||||
);
|
||||
}, [entity.tabId, activeTab, suggestedContainerId]);
|
||||
|
||||
+3
-1
@@ -83,7 +83,9 @@ class _TabDraggable extends HookConsumerWidget {
|
||||
sourceSearchQuery: switch (entity) {
|
||||
DefaultTabEntity _ => null,
|
||||
final SearchResultTabEntity entity => entity.searchQuery,
|
||||
TabTreeEntity _ => throw UnimplementedError('TabTreeEntity not implemented in tab list view'),
|
||||
TabTreeEntity _ => throw UnimplementedError(
|
||||
'TabTreeEntity not implemented in tab list view',
|
||||
),
|
||||
},
|
||||
);
|
||||
}, [entity.tabId, activeTab, suggestedContainerId]);
|
||||
|
||||
+5
-1
@@ -486,7 +486,11 @@ class TabViewHeader extends HookConsumerWidget {
|
||||
);
|
||||
}
|
||||
} catch (e, s) {
|
||||
logger.e('Failed to clear container data', error: e, stackTrace: s);
|
||||
logger.e(
|
||||
'Failed to clear container data',
|
||||
error: e,
|
||||
stackTrace: s,
|
||||
);
|
||||
if (context.mounted) {
|
||||
ui_helper.showErrorMessage(
|
||||
context,
|
||||
|
||||
@@ -171,7 +171,9 @@ class Section extends MultiSliver {
|
||||
VisitType.download => const Text('Download'),
|
||||
VisitType.framedLink => const Text('Frame'),
|
||||
VisitType.reload => const Text('Page Reload'),
|
||||
VisitType.bookmark => throw UnimplementedError('VisitType.bookmark chip display not implemented'),
|
||||
VisitType.bookmark => throw UnimplementedError(
|
||||
'VisitType.bookmark chip display not implemented',
|
||||
),
|
||||
},
|
||||
),
|
||||
Chip(
|
||||
@@ -374,7 +376,9 @@ class HistoryScreen extends HookConsumerWidget {
|
||||
VisitType.download => const Text('Downloads'),
|
||||
VisitType.framedLink => const Text('Frames'),
|
||||
VisitType.reload => const Text('Page Reloads'),
|
||||
VisitType.bookmark => throw UnimplementedError('VisitType.bookmark filter not implemented'),
|
||||
VisitType.bookmark => throw UnimplementedError(
|
||||
'VisitType.bookmark filter not implemented',
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
@@ -101,7 +101,11 @@ class TrackingProtectionExceptionsScreen extends HookConsumerWidget {
|
||||
.read(trackingProtectionRepositoryProvider.notifier)
|
||||
.removeAllExceptions();
|
||||
} catch (e, s) {
|
||||
logger.e('Failed to delete tracking protection exceptions', error: e, stackTrace: s);
|
||||
logger.e(
|
||||
'Failed to delete tracking protection exceptions',
|
||||
error: e,
|
||||
stackTrace: s,
|
||||
);
|
||||
if (context.mounted) {
|
||||
showErrorMessage(context, 'Failed to delete exceptions: $e');
|
||||
}
|
||||
@@ -119,7 +123,11 @@ class TrackingProtectionExceptionsScreen extends HookConsumerWidget {
|
||||
.read(trackingProtectionRepositoryProvider.notifier)
|
||||
.removeExceptionByUrl(exception.url);
|
||||
} catch (e, s) {
|
||||
logger.e('Failed to remove tracking protection exception', error: e, stackTrace: s);
|
||||
logger.e(
|
||||
'Failed to remove tracking protection exception',
|
||||
error: e,
|
||||
stackTrace: s,
|
||||
);
|
||||
if (context.mounted) {
|
||||
showErrorMessage(context, 'Failed to remove exception: $e');
|
||||
}
|
||||
|
||||
@@ -111,8 +111,12 @@ class TorProxyService extends _$TorProxyService {
|
||||
(setting) =>
|
||||
setting.bridge.type ==
|
||||
switch (torSettings.config) {
|
||||
TorConnectionConfig.auto => throw UnimplementedError('TorConnectionConfig.auto bridge type not supported'),
|
||||
TorConnectionConfig.direct => throw UnimplementedError('TorConnectionConfig.direct does not use bridges'),
|
||||
TorConnectionConfig.auto => throw UnimplementedError(
|
||||
'TorConnectionConfig.auto bridge type not supported',
|
||||
),
|
||||
TorConnectionConfig.direct => throw UnimplementedError(
|
||||
'TorConnectionConfig.direct does not use bridges',
|
||||
),
|
||||
TorConnectionConfig.obfs4 => MoatTransportType.obfs4,
|
||||
TorConnectionConfig.snowflake =>
|
||||
MoatTransportType.snowflake,
|
||||
|
||||
@@ -57,7 +57,11 @@ class CacheRepository extends _$CacheRepository {
|
||||
}
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
logger.e('Error in icon update events', error: error, stackTrace: stackTrace);
|
||||
logger.e(
|
||||
'Error in icon update events',
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -92,7 +92,9 @@ class FeedParser {
|
||||
tags: tags,
|
||||
);
|
||||
default:
|
||||
throw Exception('Unknown feed type in readGeneralData: ${_feed.runtimeType}');
|
||||
throw Exception(
|
||||
'Unknown feed type in readGeneralData: ${_feed.runtimeType}',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,7 +211,9 @@ class FeedParser {
|
||||
);
|
||||
}).toList();
|
||||
default:
|
||||
throw Exception('Unknown feed type in readArticles: ${_feed.runtimeType}');
|
||||
throw Exception(
|
||||
'Unknown feed type in readArticles: ${_feed.runtimeType}',
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-2
@@ -110,10 +110,18 @@ class _MainWidget extends HookConsumerWidget {
|
||||
engineSettings.addonCollection,
|
||||
);
|
||||
} on PlatformException catch (e, s) {
|
||||
logger.e('Platform exception during Gecko initialization', error: e, stackTrace: s);
|
||||
logger.e(
|
||||
'Platform exception during Gecko initialization',
|
||||
error: e,
|
||||
stackTrace: s,
|
||||
);
|
||||
rethrow;
|
||||
} catch (e, s) {
|
||||
logger.e('Failed to initialize Gecko browser service', error: e, stackTrace: s);
|
||||
logger.e(
|
||||
'Failed to initialize Gecko browser service',
|
||||
error: e,
|
||||
stackTrace: s,
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,10 @@ class _GeckoViewState extends State<GeckoView> {
|
||||
final result = await browserService.showNativeFragment();
|
||||
|
||||
if (result) {
|
||||
developer.log('Fragment ATTACHED after $attempt tries', name: 'GeckoView');
|
||||
developer.log(
|
||||
'Fragment ATTACHED after $attempt tries',
|
||||
name: 'GeckoView',
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -76,7 +79,11 @@ class _GeckoViewState extends State<GeckoView> {
|
||||
}
|
||||
}
|
||||
|
||||
developer.log('Fragment FAILED after $maxRetries tries', name: 'GeckoView', level: 900);
|
||||
developer.log(
|
||||
'Fragment FAILED after $maxRetries tries',
|
||||
name: 'GeckoView',
|
||||
level: 900,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user