in lib/embed.dart [606:688]
Future<void> _loadAndShowGist({bool analyze = true}) async {
if (gistId!.isEmpty && sampleId.isEmpty && !githubParamsPresent) {
print('Cannot load gist: neither id, sample_id, nor GitHub repo info is '
'present.');
return;
}
editorIsBusy = true;
final loader = deps[GistLoader] as GistLoader?;
try {
Gist gist;
if (gistId!.isNotEmpty) {
gist = await loader!.loadGist(gistId);
} else if (sampleId.isNotEmpty) {
// Right now, there are only two hosted versions of the docs: master and
// stable. Default to stable for dev and beta.
final channel = (sampleChannel == FlutterSdkChannel.master)
? FlutterSdkChannel.master
: FlutterSdkChannel.stable;
gist = await loader!.loadGistFromAPIDocs(sampleId, channel);
} else {
gist = await loader!.loadGistFromRepo(
owner: githubOwner,
repo: githubRepo,
path: githubPath,
ref: githubRef,
);
}
setContextSources(<String, String>{
'main.dart': gist.getFile('main.dart')?.content ?? '',
'index.html': gist.getFile('index.html')?.content ?? '',
'styles.css': gist.getFile('styles.css')?.content ?? '',
'solution.dart': gist.getFile('solution.dart')?.content ?? '',
'test.dart': gist.getFile('test.dart')?.content ?? '',
'hint.txt': gist.getFile('hint.txt')?.content ?? '',
});
if (analyze) {
unawaited(performAnalysis());
}
if (autoRunEnabled) {
unawaited(handleRun());
}
} on GistLoaderException catch (ex) {
// No gist was loaded, so clear the editors.
setContextSources(<String, String>{});
if (ex.failureType == GistLoaderFailureType.contentNotFound) {
await dialog.showOk(
'Error loading gist',
'No gist was found for the gist ID, sample ID, or repository '
'information provided.');
} else if (ex.failureType == GistLoaderFailureType.rateLimitExceeded) {
await dialog.showOk(
'Error loading files',
'GitHub\'s rate limit for '
'API requests has been exceeded. This is typically caused by '
'repeatedly loading a single page that has many DartPad embeds or '
'when many users are accessing DartPad (and therefore GitHub\'s '
'API server) from a single, shared IP address. Quotas are '
'typically renewed within an hour, so the best course of action is '
'to try back later.');
} else if (ex.failureType ==
GistLoaderFailureType.invalidExerciseMetadata) {
if (ex.message != null) {
print(ex.message);
}
await dialog.showOk(
'Error loading files',
'DartPad could not load the requested exercise. Either one of the '
'required files wasn\'t available, or the exercise metadata was '
'invalid.');
} else {
await dialog.showOk('Error loading files',
'An error occurred while the requested files.');
}
}
}