diff --git a/analyze/analyze.dart b/analyze/analyze.dart
index 00df77d..2ad5b71 100644
--- a/analyze/analyze.dart
+++ b/analyze/analyze.dart
@@ -45,12 +45,11 @@
 
 Future<void> verifyProtos(Directory workingDirectory) async {
   final errors = <String>[];
-  final protos =
-      await _allFiles(
-        workingDirectory.path,
-        'proto',
-        minimumMatches: 1,
-      ).toList();
+  final protos = await _allFiles(
+    workingDirectory.path,
+    'proto',
+    minimumMatches: 1,
+  ).toList();
   for (final proto in protos) {
     final content = proto.readAsStringSync();
     if (!content.contains(RegExp(r'package\ \w+;'))) {
@@ -244,10 +243,9 @@
   // 0b001001001
   const executableBitMask = 0x49;
   final files = await _gitFiles(cocoonRoot.path);
-  final relativePaths =
-      files.map<String>((File file) {
-        return path.relative(file.path, from: cocoonRoot.path);
-      }).toList();
+  final relativePaths = files.map<String>((File file) {
+    return path.relative(file.path, from: cocoonRoot.path);
+  }).toList();
   for (var allowed in kExecutableAllowlist) {
     if (!relativePaths.contains(allowed)) {
       throw Exception(
diff --git a/analyze/pubspec.yaml b/analyze/pubspec.yaml
index 8699e32..78cc9b0 100644
--- a/analyze/pubspec.yaml
+++ b/analyze/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   file: 7.0.1
diff --git a/auto_submit/bin/server.dart b/auto_submit/bin/server.dart
index 82d51a6..70ac797 100644
--- a/auto_submit/bin/server.dart
+++ b/auto_submit/bin/server.dart
@@ -34,24 +34,17 @@
     );
     const authProvider = CronAuthProvider();
 
-    final router =
-        Router()
-          ..post('/webhook', GithubWebhook(config: config).post)
-          ..get(
-            '/check-pull-request',
-            CheckPullRequest(
-              config: config,
-              cronAuthProvider: authProvider,
-            ).run,
-          )
-          ..get(
-            '/check-revert-requests',
-            CheckRevertRequest(
-              config: config,
-              cronAuthProvider: authProvider,
-            ).run,
-          )
-          ..get('/readiness_check', ReadinessCheck(config: config).run);
+    final router = Router()
+      ..post('/webhook', GithubWebhook(config: config).post)
+      ..get(
+        '/check-pull-request',
+        CheckPullRequest(config: config, cronAuthProvider: authProvider).run,
+      )
+      ..get(
+        '/check-revert-requests',
+        CheckRevertRequest(config: config, cronAuthProvider: authProvider).run,
+      )
+      ..get('/readiness_check', ReadinessCheck(config: config).run);
     await serveHandler(router.call);
   });
 }
diff --git a/auto_submit/lib/action/git_cli_revert_method.dart b/auto_submit/lib/action/git_cli_revert_method.dart
index d76f58b..8fd586a 100644
--- a/auto_submit/lib/action/git_cli_revert_method.dart
+++ b/auto_submit/lib/action/git_cli_revert_method.dart
@@ -86,17 +86,16 @@
       pullRequestToRevert.number!,
     );
 
-    final formatter =
-        RevertIssueBodyFormatter(
-          slug: slug,
-          prToRevertNumber: pullRequestToRevert.number!,
-          initiatingAuthor: initiatingAuthor,
-          revertReason: reasonForRevert,
-          prToRevertAuthor: pullRequestToRevert.user!.login,
-          prToRevertReviewers: prToRevertReviewers,
-          prToRevertTitle: pullRequestToRevert.title,
-          prToRevertBody: pullRequestToRevert.body,
-        ).format;
+    final formatter = RevertIssueBodyFormatter(
+      slug: slug,
+      prToRevertNumber: pullRequestToRevert.number!,
+      initiatingAuthor: initiatingAuthor,
+      revertReason: reasonForRevert,
+      prToRevertAuthor: pullRequestToRevert.user!.login,
+      prToRevertReviewers: prToRevertReviewers,
+      prToRevertTitle: pullRequestToRevert.title,
+      prToRevertBody: pullRequestToRevert.body,
+    ).format;
 
     log.info(
       'Attempting to create pull request with ${slug.fullName}/${gitRevertBranchName.branch}.',
diff --git a/auto_submit/lib/model/auto_submit_query_result.g.dart b/auto_submit/lib/model/auto_submit_query_result.g.dart
index 973cdbe..eab4734 100644
--- a/auto_submit/lib/model/auto_submit_query_result.g.dart
+++ b/auto_submit/lib/model/auto_submit_query_result.g.dart
@@ -14,10 +14,9 @@
 };
 
 ReviewNode _$ReviewNodeFromJson(Map<String, dynamic> json) => ReviewNode(
-  author:
-      json['author'] == null
-          ? null
-          : Author.fromJson(json['author'] as Map<String, dynamic>),
+  author: json['author'] == null
+      ? null
+      : Author.fromJson(json['author'] as Map<String, dynamic>),
   authorAssociation: json['authorAssociation'] as String?,
   state: json['state'] as String?,
 );
@@ -30,10 +29,9 @@
     };
 
 Reviews _$ReviewsFromJson(Map<String, dynamic> json) => Reviews(
-  nodes:
-      (json['nodes'] as List<dynamic>?)
-          ?.map((e) => ReviewNode.fromJson(e as Map<String, dynamic>))
-          .toList(),
+  nodes: (json['nodes'] as List<dynamic>?)
+      ?.map((e) => ReviewNode.fromJson(e as Map<String, dynamic>))
+      .toList(),
 );
 
 Map<String, dynamic> _$ReviewsToJson(Reviews instance) => <String, dynamic>{
@@ -41,20 +39,18 @@
 };
 
 CommitNode _$CommitNodeFromJson(Map<String, dynamic> json) => CommitNode(
-  commit:
-      json['commit'] == null
-          ? null
-          : Commit.fromJson(json['commit'] as Map<String, dynamic>),
+  commit: json['commit'] == null
+      ? null
+      : Commit.fromJson(json['commit'] as Map<String, dynamic>),
 );
 
 Map<String, dynamic> _$CommitNodeToJson(CommitNode instance) =>
     <String, dynamic>{'commit': instance.commit};
 
 Commits _$CommitsFromJson(Map<String, dynamic> json) => Commits(
-  nodes:
-      (json['nodes'] as List<dynamic>?)
-          ?.map((e) => CommitNode.fromJson(e as Map<String, dynamic>))
-          .toList(),
+  nodes: (json['nodes'] as List<dynamic>?)
+      ?.map((e) => CommitNode.fromJson(e as Map<String, dynamic>))
+      .toList(),
 );
 
 Map<String, dynamic> _$CommitsToJson(Commits instance) => <String, dynamic>{
@@ -62,10 +58,9 @@
 };
 
 ContextNode _$ContextNodeFromJson(Map<String, dynamic> json) => ContextNode(
-  createdAt:
-      json['createdAt'] == null
-          ? null
-          : DateTime.parse(json['createdAt'] as String),
+  createdAt: json['createdAt'] == null
+      ? null
+      : DateTime.parse(json['createdAt'] as String),
   context: json['context'] as String?,
   state: json['state'] as String?,
   targetUrl: json['targetUrl'] as String?,
@@ -80,10 +75,9 @@
     };
 
 Status _$StatusFromJson(Map<String, dynamic> json) => Status(
-  contexts:
-      (json['contexts'] as List<dynamic>?)
-          ?.map((e) => ContextNode.fromJson(e as Map<String, dynamic>))
-          .toList(),
+  contexts: (json['contexts'] as List<dynamic>?)
+      ?.map((e) => ContextNode.fromJson(e as Map<String, dynamic>))
+      .toList(),
 );
 
 Map<String, dynamic> _$StatusToJson(Status instance) => <String, dynamic>{
@@ -93,18 +87,15 @@
 Commit _$CommitFromJson(Map<String, dynamic> json) => Commit(
   abbreviatedOid: json['abbreviatedOid'] as String?,
   oid: json['oid'] as String?,
-  committedDate:
-      json['committedDate'] == null
-          ? null
-          : DateTime.parse(json['committedDate'] as String),
-  pushedDate:
-      json['pushedDate'] == null
-          ? null
-          : DateTime.parse(json['pushedDate'] as String),
-  status:
-      json['status'] == null
-          ? null
-          : Status.fromJson(json['status'] as Map<String, dynamic>),
+  committedDate: json['committedDate'] == null
+      ? null
+      : DateTime.parse(json['committedDate'] as String),
+  pushedDate: json['pushedDate'] == null
+      ? null
+      : DateTime.parse(json['pushedDate'] as String),
+  status: json['status'] == null
+      ? null
+      : Status.fromJson(json['status'] as Map<String, dynamic>),
 );
 
 Map<String, dynamic> _$CommitToJson(Commit instance) => <String, dynamic>{
@@ -116,22 +107,19 @@
 };
 
 PullRequest _$PullRequestFromJson(Map<String, dynamic> json) => PullRequest(
-  author:
-      json['author'] == null
-          ? null
-          : Author.fromJson(json['author'] as Map<String, dynamic>),
+  author: json['author'] == null
+      ? null
+      : Author.fromJson(json['author'] as Map<String, dynamic>),
   authorAssociation: json['authorAssociation'] as String?,
   id: json['id'] as String?,
   title: json['title'] as String?,
   body: json['body'] as String?,
-  reviews:
-      json['reviews'] == null
-          ? null
-          : Reviews.fromJson(json['reviews'] as Map<String, dynamic>),
-  commits:
-      json['commits'] == null
-          ? null
-          : Commits.fromJson(json['commits'] as Map<String, dynamic>),
+  reviews: json['reviews'] == null
+      ? null
+      : Reviews.fromJson(json['reviews'] as Map<String, dynamic>),
+  commits: json['commits'] == null
+      ? null
+      : Commits.fromJson(json['commits'] as Map<String, dynamic>),
   number: (json['number'] as num?)?.toInt(),
   mergeable: $enumDecodeNullable(_$MergeableStateEnumMap, json['mergeable']),
   isInMergeQueue: json['isInMergeQueue'] as bool? ?? false,
@@ -158,20 +146,18 @@
 };
 
 Repository _$RepositoryFromJson(Map<String, dynamic> json) => Repository(
-  pullRequest:
-      json['pullRequest'] == null
-          ? null
-          : PullRequest.fromJson(json['pullRequest'] as Map<String, dynamic>),
+  pullRequest: json['pullRequest'] == null
+      ? null
+      : PullRequest.fromJson(json['pullRequest'] as Map<String, dynamic>),
 );
 
 Map<String, dynamic> _$RepositoryToJson(Repository instance) =>
     <String, dynamic>{'pullRequest': instance.pullRequest};
 
 QueryResult _$QueryResultFromJson(Map<String, dynamic> json) => QueryResult(
-  repository:
-      json['repository'] == null
-          ? null
-          : Repository.fromJson(json['repository'] as Map<String, dynamic>),
+  repository: json['repository'] == null
+      ? null
+      : Repository.fromJson(json['repository'] as Map<String, dynamic>),
 );
 
 Map<String, dynamic> _$QueryResultToJson(QueryResult instance) =>
@@ -180,18 +166,14 @@
 RevertPullRequest _$RevertPullRequestFromJson(Map<String, dynamic> json) =>
     RevertPullRequest(
       clientMutationId: json['clientMutationId'] as String?,
-      pullRequest:
-          json['pullRequest'] == null
-              ? null
-              : PullRequest.fromJson(
-                json['pullRequest'] as Map<String, dynamic>,
-              ),
-      revertPullRequest:
-          json['revertPullRequest'] == null
-              ? null
-              : PullRequest.fromJson(
-                json['revertPullRequest'] as Map<String, dynamic>,
-              ),
+      pullRequest: json['pullRequest'] == null
+          ? null
+          : PullRequest.fromJson(json['pullRequest'] as Map<String, dynamic>),
+      revertPullRequest: json['revertPullRequest'] == null
+          ? null
+          : PullRequest.fromJson(
+              json['revertPullRequest'] as Map<String, dynamic>,
+            ),
     );
 
 Map<String, dynamic> _$RevertPullRequestToJson(RevertPullRequest instance) =>
@@ -204,12 +186,11 @@
 RevertPullRequestData _$RevertPullRequestDataFromJson(
   Map<String, dynamic> json,
 ) => RevertPullRequestData(
-  revertPullRequest:
-      json['revertPullRequest'] == null
-          ? null
-          : RevertPullRequest.fromJson(
-            json['revertPullRequest'] as Map<String, dynamic>,
-          ),
+  revertPullRequest: json['revertPullRequest'] == null
+      ? null
+      : RevertPullRequest.fromJson(
+          json['revertPullRequest'] as Map<String, dynamic>,
+        ),
 );
 
 Map<String, dynamic> _$RevertPullRequestDataToJson(
diff --git a/auto_submit/lib/requests/github_pull_request_event.g.dart b/auto_submit/lib/requests/github_pull_request_event.g.dart
index 75d2425..0932f92 100644
--- a/auto_submit/lib/requests/github_pull_request_event.g.dart
+++ b/auto_submit/lib/requests/github_pull_request_event.g.dart
@@ -9,15 +9,13 @@
 GithubPullRequestEvent _$GithubPullRequestEventFromJson(
   Map<String, dynamic> json,
 ) => GithubPullRequestEvent(
-  pullRequest:
-      json['pull_request'] == null
-          ? null
-          : PullRequest.fromJson(json['pull_request'] as Map<String, dynamic>),
+  pullRequest: json['pull_request'] == null
+      ? null
+      : PullRequest.fromJson(json['pull_request'] as Map<String, dynamic>),
   action: json['action'] as String?,
-  sender:
-      json['sender'] == null
-          ? null
-          : User.fromJson(json['sender'] as Map<String, dynamic>),
+  sender: json['sender'] == null
+      ? null
+      : User.fromJson(json['sender'] as Map<String, dynamic>),
 );
 
 Map<String, dynamic> _$GithubPullRequestEventToJson(
diff --git a/auto_submit/lib/requests/github_webhook.dart b/auto_submit/lib/requests/github_webhook.dart
index dcb02dc..ad53d07 100644
--- a/auto_submit/lib/requests/github_webhook.dart
+++ b/auto_submit/lib/requests/github_webhook.dart
@@ -44,8 +44,10 @@
         request.headers[GithubWebhook.signatureHeader] == null) {
       throw const BadRequestException('Missing required headers.');
     }
-    final requestBytes =
-        await request.read().expand((bodyBytes) => bodyBytes).toList();
+    final requestBytes = await request
+        .read()
+        .expand((bodyBytes) => bodyBytes)
+        .toList();
     final hmacSignature = request.headers[GithubWebhook.signatureHeader];
     if (!await _validateRequest(hmacSignature, requestBytes)) {
       log.info('User is forbidden');
diff --git a/auto_submit/lib/revert/revert_discord_message.dart b/auto_submit/lib/revert/revert_discord_message.dart
index 227b1d0..f70f7ad 100644
--- a/auto_submit/lib/revert/revert_discord_message.dart
+++ b/auto_submit/lib/revert/revert_discord_message.dart
@@ -19,15 +19,15 @@
     String initiatingAuthor,
     String reasonForRevert,
   ) {
-    final content = '''
+    final content =
+        '''
 Pull Request [$originalPrDisplayText](<$originalPrUrl>) has been reverted by $initiatingAuthor.
 Please see the revert PR here: [$revertPrDisplayText](<$revertPrUrl>).
 Reason for reverting: $reasonForRevert''';
 
-    final truncatedContent =
-        content.length <= discordMessageLength
-            ? content
-            : '${content.substring(0, discordMessageLength - elipsesOffset)}...';
+    final truncatedContent = content.length <= discordMessageLength
+        ? content
+        : '${content.substring(0, discordMessageLength - elipsesOffset)}...';
 
     return RevertDiscordMessage(content: truncatedContent, username: _username);
   }
diff --git a/auto_submit/lib/revert/revert_info_collection.dart b/auto_submit/lib/revert/revert_info_collection.dart
index fcd6402..1cccb6c 100644
--- a/auto_submit/lib/revert/revert_info_collection.dart
+++ b/auto_submit/lib/revert/revert_info_collection.dart
@@ -75,8 +75,9 @@
     // is a block of text that contain links. We want to preserve the link so we
     // take text after the first colon ':' to avoid destroying information with
     // a split.
-    final matchedText =
-        foundMatch.substring(foundMatch.indexOf(':') + 1).trim();
+    final matchedText = foundMatch
+        .substring(foundMatch.indexOf(':') + 1)
+        .trim();
     return matchedText;
   }
 }
diff --git a/auto_submit/lib/revert/revert_issue_body_formatter.dart b/auto_submit/lib/revert/revert_issue_body_formatter.dart
index 8b2eec6..daa4c24 100644
--- a/auto_submit/lib/revert/revert_issue_body_formatter.dart
+++ b/auto_submit/lib/revert/revert_issue_body_formatter.dart
@@ -44,7 +44,8 @@
     prToRevertBody ??= 'No description provided.';
 
     // Create the body for the revert issue.
-    revertPrBody = '''
+    revertPrBody =
+        '''
 <!-- start_original_pr_link -->
 Reverts: $revertPrLink
 <!-- end_original_pr_link -->
diff --git a/auto_submit/lib/service/pull_request_validation_service.dart b/auto_submit/lib/service/pull_request_validation_service.dart
index 4650d75..be4204e 100644
--- a/auto_submit/lib/service/pull_request_validation_service.dart
+++ b/auto_submit/lib/service/pull_request_validation_service.dart
@@ -181,8 +181,9 @@
     var shouldReturn = false;
     for (final MapEntry(key: _, :value) in validationsMap.entries) {
       if (!value.result && value.action == Action.REMOVE_LABEL) {
-        final commentMessage =
-            value.message.isEmpty ? 'Validations Fail.' : value.message;
+        final commentMessage = value.message.isEmpty
+            ? 'Validations Fail.'
+            : value.message;
         await _removeAutosubmitLabel(commentMessage);
         shouldReturn = true;
       }
diff --git a/auto_submit/lib/service/revert_request_validation_service.dart b/auto_submit/lib/service/revert_request_validation_service.dart
index 6c3741c..58910db 100644
--- a/auto_submit/lib/service/revert_request_validation_service.dart
+++ b/auto_submit/lib/service/revert_request_validation_service.dart
@@ -342,8 +342,9 @@
     var shouldReturn = false;
     for (final MapEntry(key: _, :value) in validationsMap.entries) {
       if (!value.result && value.action == Action.REMOVE_LABEL) {
-        final commmentMessage =
-            value.message.isEmpty ? 'Validations Fail.' : value.message;
+        final commmentMessage = value.message.isEmpty
+            ? 'Validations Fail.'
+            : value.message;
         final message =
             'auto label is removed for ${slug.fullName}/$prNumber, due to $commmentMessage';
         await githubService.removeLabel(slug, prNumber, Config.kRevertOfLabel);
diff --git a/auto_submit/lib/service/validation_service.dart b/auto_submit/lib/service/validation_service.dart
index d742e86..2a06d7f 100644
--- a/auto_submit/lib/service/validation_service.dart
+++ b/auto_submit/lib/service/validation_service.dart
@@ -70,7 +70,8 @@
 
     if (pullRequest.title!.contains(revertPattern)) {
       // Cleanup auto-generated revert messages.
-      messagePrefix = '''
+      messagePrefix =
+          '''
 ${pullRequest.title!.replaceFirst('Revert "Revert', 'Reland')}
 
 ''';
diff --git a/auto_submit/lib/validations/approval.dart b/auto_submit/lib/validations/approval.dart
index 83654b3..a25131c 100644
--- a/auto_submit/lib/validations/approval.dart
+++ b/auto_submit/lib/validations/approval.dart
@@ -66,10 +66,9 @@
       );
 
       String approvedMessage;
-      final flutterHackerMessage =
-          authorIsFlutterHacker
-              ? 'The PR author is a member of ${repositoryConfiguration.approvalGroup}'
-              : 'The PR author is not a member of ${repositoryConfiguration.approvalGroup}';
+      final flutterHackerMessage = authorIsFlutterHacker
+          ? 'The PR author is a member of ${repositoryConfiguration.approvalGroup}'
+          : 'The PR author is not a member of ${repositoryConfiguration.approvalGroup}';
       // Changes were requested, review count does not matter.
       if (approver.changeRequestAuthors.isNotEmpty) {
         approved = false;
@@ -78,10 +77,9 @@
             '$flutterHackerMessage and needs ${approver.remainingReviews} more review(s) in order to merge this PR.\n';
       } else {
         // No changes were requested so check approval count.
-        approvedMessage =
-            approved
-                ? 'This PR has met approval requirements for merging.\n'
-                : 'This PR has not met approval requirements for merging. $flutterHackerMessage and needs ${approver.remainingReviews} more review(s) in order to merge this PR.\n';
+        approvedMessage = approved
+            ? 'This PR has met approval requirements for merging.\n'
+            : 'This PR has not met approval requirements for merging. $flutterHackerMessage and needs ${approver.remainingReviews} more review(s) in order to merge this PR.\n';
         if (!approved && authorIsFlutterHacker) {
           // Flutter hackers are aware of the review requirements, and can add
           // the autosubmit label without waiting on review.
@@ -89,10 +87,9 @@
         }
       }
 
-      message =
-          approved
-              ? approvedMessage
-              : '$approvedMessage\n${Config.pullRequestApprovalRequirementsMessage}';
+      message = approved
+          ? approvedMessage
+          : '$approvedMessage\n${Config.pullRequestApprovalRequirementsMessage}';
     }
 
     return ValidationResult(approved, action, message);
diff --git a/auto_submit/lib/validations/ci_successful.dart b/auto_submit/lib/validations/ci_successful.dart
index e8511ee..c6974bf 100644
--- a/auto_submit/lib/validations/ci_successful.dart
+++ b/auto_submit/lib/validations/ci_successful.dart
@@ -32,10 +32,9 @@
     var allSuccess = true;
     final slug = messagePullRequest.base!.repo!.slug();
     final prNumber = messagePullRequest.number!;
-    final prState =
-        (messagePullRequest.state == 'closed')
-            ? PullRequestState.closed
-            : PullRequestState.open;
+    final prState = (messagePullRequest.state == 'closed')
+        ? PullRequestState.closed
+        : PullRequestState.open;
     final pullRequest = result.repository!.pullRequest!;
     final failures = <FailureDetail>{};
 
@@ -76,10 +75,9 @@
     }
 
     // List of labels associated with the pull request.
-    final labelNames =
-        (messagePullRequest.labels as List<github.IssueLabel>)
-            .map<String>((github.IssueLabel labelMap) => labelMap.name)
-            .toList();
+    final labelNames = (messagePullRequest.labels as List<github.IssueLabel>)
+        .map<String>((github.IssueLabel labelMap) => labelMap.name)
+        .toList();
 
     /// Validate if all statuses have been successful.
     allSuccess = validateStatuses(
@@ -125,10 +123,9 @@
         );
       }
     }
-    final action =
-        labelNames.contains(Config.kEmergencyLabel)
-            ? Action.IGNORE_FAILURE
-            : Action.REMOVE_LABEL;
+    final action = labelNames.contains(Config.kEmergencyLabel)
+        ? Action.IGNORE_FAILURE
+        : Action.REMOVE_LABEL;
     return ValidationResult(allSuccess, action, buffer.toString());
   }
 
diff --git a/auto_submit/pubspec.yaml b/auto_submit/pubspec.yaml
index 9907ec0..7933f0b 100644
--- a/auto_submit/pubspec.yaml
+++ b/auto_submit/pubspec.yaml
@@ -8,7 +8,7 @@
 homepage: https://github.com/flutter/cocoon/blob/main/autosubmit
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   appengine: 0.13.11
diff --git a/auto_submit/test/requests/github_webhook_test.dart b/auto_submit/test/requests/github_webhook_test.dart
index 8f23729..f0b9720 100644
--- a/auto_submit/test/requests/github_webhook_test.dart
+++ b/auto_submit/test/requests/github_webhook_test.dart
@@ -55,10 +55,9 @@
       final response = await githubWebhook.post(req);
       final resBody = await response.readAsString();
       final reqBody = json.decode(resBody) as Map<String, dynamic>;
-      final labels =
-          PullRequest.fromJson(
-            reqBody['pull_request'] as Map<String, dynamic>,
-          ).labels!;
+      final labels = PullRequest.fromJson(
+        reqBody['pull_request'] as Map<String, dynamic>,
+      ).labels!;
       expect(labels[0].name, 'cla: yes');
       expect(labels[1].name, 'autosubmit');
     });
diff --git a/auto_submit/test/revert/revert_discord_message_test.dart b/auto_submit/test/revert/revert_discord_message_test.dart
index fdebece..71b79f5 100644
--- a/auto_submit/test/revert/revert_discord_message_test.dart
+++ b/auto_submit/test/revert/revert_discord_message_test.dart
@@ -18,7 +18,8 @@
     String reasonForRevert,
     String realOutput,
   ) {
-    final expectedFormattedOutput = '''
+    final expectedFormattedOutput =
+        '''
 Pull Request [$originalPrDisplayText](<$originalPrUrl>) has been reverted by $initiatingAuthor.
 Please see the revert PR here: [$revertPrDisplayText](<$revertPrUrl>).
 Reason for reverting: $reasonForRevert''';
diff --git a/auto_submit/test/revert/revert_issue_body_formatter_test.dart b/auto_submit/test/revert/revert_issue_body_formatter_test.dart
index 149d4c3..eb65616 100644
--- a/auto_submit/test/revert/revert_issue_body_formatter_test.dart
+++ b/auto_submit/test/revert/revert_issue_body_formatter_test.dart
@@ -23,17 +23,16 @@
     final originalPrReviewers = <String>{'Mando', 'Grogu'};
     RevertIssueBodyFormatter? revertIssueBodyFormatter;
     expect(
-      () =>
-          revertIssueBodyFormatter = RevertIssueBodyFormatter(
-            slug: RepositorySlug('flutter', 'flutter'),
-            prToRevertNumber: pullRequest.number!,
-            initiatingAuthor: sender,
-            revertReason: reason,
-            prToRevertAuthor: originalPrAuthor,
-            prToRevertReviewers: originalPrReviewers,
-            prToRevertTitle: pullRequest.title,
-            prToRevertBody: pullRequest.body,
-          ),
+      () => revertIssueBodyFormatter = RevertIssueBodyFormatter(
+        slug: RepositorySlug('flutter', 'flutter'),
+        prToRevertNumber: pullRequest.number!,
+        initiatingAuthor: sender,
+        revertReason: reason,
+        prToRevertAuthor: originalPrAuthor,
+        prToRevertReviewers: originalPrReviewers,
+        prToRevertTitle: pullRequest.title,
+        prToRevertBody: pullRequest.body,
+      ),
       returnsNormally,
     );
     revertIssueBodyFormatter!.format;
diff --git a/auto_submit/test/utilities/utils.dart b/auto_submit/test/utilities/utils.dart
index dc1b1a2..9fce10b 100644
--- a/auto_submit/test/utilities/utils.dart
+++ b/auto_submit/test/utilities/utils.dart
@@ -87,20 +87,16 @@
               .toIso8601String(),
       'isInMergeQueue': isInMergeQueue,
       'reviews': <String, dynamic>{
-        'nodes':
-            reviews.map((PullRequestReviewHelper review) {
-              return <String, dynamic>{
-                'author': <String, dynamic>{'login': review.authorName},
-                'authorAssociation': review.memberType.toString().replaceFirst(
-                  'MemberType.',
-                  '',
-                ),
-                'state': review.state.toString().replaceFirst(
-                  'ReviewState.',
-                  '',
-                ),
-              };
-            }).toList(),
+        'nodes': reviews.map((PullRequestReviewHelper review) {
+          return <String, dynamic>{
+            'author': <String, dynamic>{'login': review.authorName},
+            'authorAssociation': review.memberType.toString().replaceFirst(
+              'MemberType.',
+              '',
+            ),
+            'state': review.state.toString().replaceFirst('ReviewState.', ''),
+          };
+        }).toList(),
       },
       'commits': <String, dynamic>{
         'nodes': <dynamic>[
@@ -113,16 +109,15 @@
                       .toIso8601String(),
               'message': lastCommitMessage,
               'status': <String, dynamic>{
-                'contexts':
-                    lastCommitStatuses != null
-                        ? lastCommitStatuses!.map((StatusHelper status) {
-                          return <String, dynamic>{
-                            'context': status.name,
-                            'state': status.state,
-                            'targetUrl': 'https://${status.name}',
-                          };
-                        }).toList()
-                        : <dynamic>[],
+                'contexts': lastCommitStatuses != null
+                    ? lastCommitStatuses!.map((StatusHelper status) {
+                        return <String, dynamic>{
+                          'context': status.name,
+                          'state': status.state,
+                          'targetUrl': 'https://${status.name}',
+                        };
+                      }).toList()
+                    : <dynamic>[],
               },
             },
           },
diff --git a/cipd_packages/codesign/bin/codesign.dart b/cipd_packages/codesign/bin/codesign.dart
index d0b16d8..e76f95a 100644
--- a/cipd_packages/codesign/bin/codesign.dart
+++ b/cipd_packages/codesign/bin/codesign.dart
@@ -124,16 +124,24 @@
 
   const Platform platform = LocalPlatform();
 
-  final codesignCertName =
-      getValueFromArgs(kCodesignCertNameOption, argResults)!;
+  final codesignCertName = getValueFromArgs(
+    kCodesignCertNameOption,
+    argResults,
+  )!;
   final inputZipPath = getValueFromArgs(kInputZipPathOption, argResults)!;
   final outputZipPath = getValueFromArgs(kOutputZipPathOption, argResults)!;
-  final appSpecificPasswordFilePath =
-      getValueFromArgs(kAppSpecificPasswordOption, argResults)!;
-  final codesignAppstoreIDFilePath =
-      getValueFromArgs(kCodesignAppstoreIDOption, argResults)!;
-  final codesignTeamIDFilePath =
-      getValueFromArgs(kCodesignTeamIDOption, argResults)!;
+  final appSpecificPasswordFilePath = getValueFromArgs(
+    kAppSpecificPasswordOption,
+    argResults,
+  )!;
+  final codesignAppstoreIDFilePath = getValueFromArgs(
+    kCodesignAppstoreIDOption,
+    argResults,
+  )!;
+  final codesignTeamIDFilePath = getValueFromArgs(
+    kCodesignTeamIDOption,
+    argResults,
+  )!;
 
   final dryrun = argResults[kDryrunFlag] as bool;
 
diff --git a/cipd_packages/codesign/bin/verify.dart b/cipd_packages/codesign/bin/verify.dart
index 4dfe728..d408e78 100644
--- a/cipd_packages/codesign/bin/verify.dart
+++ b/cipd_packages/codesign/bin/verify.dart
@@ -21,7 +21,9 @@
     io.exit(1);
   }
   final inputFile = args[0];
-  final result =
-      await VerificationService(binaryPath: inputFile, logger: logger).run();
+  final result = await VerificationService(
+    binaryPath: inputFile,
+    logger: logger,
+  ).run();
   io.exit(result == VerificationResult.codesignedAndNotarized ? 0 : 1);
 }
diff --git a/cipd_packages/codesign/lib/src/file_codesign_visitor.dart b/cipd_packages/codesign/lib/src/file_codesign_visitor.dart
index 8c9e0ac..246121a 100644
--- a/cipd_packages/codesign/lib/src/file_codesign_visitor.dart
+++ b/cipd_packages/codesign/lib/src/file_codesign_visitor.dart
@@ -130,7 +130,8 @@
   );
   static final RegExp _notarytoolRequestPattern = RegExp(r'id: ([a-z0-9-]+)');
 
-  static final String fixItInstructions = '''
+  static final String fixItInstructions =
+      '''
 Codesign test failed.
 
 We compared binary files in engine artifacts with those listed in
diff --git a/cipd_packages/codesign/pubspec.yaml b/cipd_packages/codesign/pubspec.yaml
index 775a550..4a5cb6d 100644
--- a/cipd_packages/codesign/pubspec.yaml
+++ b/cipd_packages/codesign/pubspec.yaml
@@ -4,7 +4,7 @@
 homepage: https://github.com/flutter/cocoon
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   archive: 4.0.7
diff --git a/cipd_packages/codesign/test/file_codesign_visitor_test.dart b/cipd_packages/codesign/test/file_codesign_visitor_test.dart
index e8a00a9..db8b496 100644
--- a/cipd_packages/codesign/test/file_codesign_visitor_test.dart
+++ b/cipd_packages/codesign/test/file_codesign_visitor_test.dart
@@ -127,18 +127,16 @@
             '-d',
             '${rootDirectory.absolute.path}/single_artifact',
           ],
-          onRun:
-              () =>
-                  fileSystem
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/entitlements.txt',
-                    ).createSync(recursive: true)
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/without_entitlements.txt',
-                    ).createSync(recursive: true)
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/unsigned_binaries.txt',
-                    ).createSync(recursive: true),
+          onRun: () => fileSystem
+            ..file(
+              '${rootDirectory.path}/single_artifact/entitlements.txt',
+            ).createSync(recursive: true)
+            ..file(
+              '${rootDirectory.path}/single_artifact/without_entitlements.txt',
+            ).createSync(recursive: true)
+            ..file(
+              '${rootDirectory.path}/single_artifact/unsigned_binaries.txt',
+            ).createSync(recursive: true),
         ),
         FakeCommand(
           command: <String>[
@@ -185,11 +183,10 @@
       ]);
 
       await codesignVisitor.processRemoteZip();
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toSet();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toSet();
       expect(
         messages,
         contains(
@@ -300,11 +297,10 @@
         directory: testDirectory,
         parentVirtualPath: 'a.zip',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains('Visiting directory ${rootDirectory.path}/remote_zip_0'),
@@ -358,11 +354,10 @@
         directory: testDirectory,
         parentVirtualPath: '',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains('Visiting directory ${rootDirectory.path}/remote_zip_1'),
@@ -391,15 +386,13 @@
             '-d',
             '${rootDirectory.absolute.path}/embedded_zip_${zipFileName.hashCode}',
           ],
-          onRun:
-              () =>
-                  fileSystem
-                    ..file(
-                      '${rootDirectory.path}/embedded_zip_${zipFileName.hashCode}/file_1',
-                    ).createSync(recursive: true)
-                    ..file(
-                      '${rootDirectory.path}/embedded_zip_${zipFileName.hashCode}/file_2',
-                    ).createSync(recursive: true),
+          onRun: () => fileSystem
+            ..file(
+              '${rootDirectory.path}/embedded_zip_${zipFileName.hashCode}/file_1',
+            ).createSync(recursive: true)
+            ..file(
+              '${rootDirectory.path}/embedded_zip_${zipFileName.hashCode}/file_2',
+            ).createSync(recursive: true),
         ),
         FakeCommand(
           command: <String>[
@@ -429,10 +422,9 @@
             '--include',
             '*',
           ],
-          onRun:
-              () => fileSystem
-                  .file('${rootDirectory.path}/remote_zip_2/zip_1')
-                  .createSync(recursive: true),
+          onRun: () => fileSystem
+              .file('${rootDirectory.path}/remote_zip_2/zip_1')
+              .createSync(recursive: true),
         ),
       ]);
 
@@ -440,11 +432,10 @@
         zipEntity: fileSystem.file('${rootDirectory.path}/remote_zip_2/zip_1'),
         parentVirtualPath: 'a.zip',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains(
@@ -491,12 +482,11 @@
             '-d',
             '${rootDirectory.absolute.path}/embedded_zip_${zipFileName.hashCode}',
           ],
-          onRun:
-              () => fileSystem
-                  .directory(
-                    '${rootDirectory.path}/embedded_zip_${zipFileName.hashCode}',
-                  )
-                  .createSync(recursive: true),
+          onRun: () => fileSystem
+              .directory(
+                '${rootDirectory.path}/embedded_zip_${zipFileName.hashCode}',
+              )
+              .createSync(recursive: true),
         ),
         FakeCommand(
           command: <String>[
@@ -515,11 +505,10 @@
         directory: fileSystem.directory('${rootDirectory.path}/remote_zip_4'),
         parentVirtualPath: 'a.zip',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains(
@@ -577,22 +566,20 @@
         ),
         parentVirtualPath: 'a.zip',
       );
-      var warnings =
-          records
-              .where((LogRecord record) => record.level == Level.WARNING)
-              .map((LogRecord record) => record.message)
-              .toList();
+      var warnings = records
+          .where((LogRecord record) => record.level == Level.WARNING)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(warnings, isEmpty);
 
       await codesignVisitor.visitDirectory(
         directory: fileSystem.directory('${rootDirectory.path}/parent_1'),
         parentVirtualPath: 'a.zip',
       );
-      warnings =
-          records
-              .where((LogRecord record) => record.level == Level.WARNING)
-              .map((LogRecord record) => record.message)
-              .toList();
+      warnings = records
+          .where((LogRecord record) => record.level == Level.WARNING)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         warnings,
         contains(
@@ -633,11 +620,10 @@
         directory: testDirectory,
         parentVirtualPath: 'a.zip',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toSet();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toSet();
       expect(
         messages,
         contains(
@@ -741,11 +727,10 @@
         directory: testDirectory,
         parentVirtualPath: '',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toSet();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toSet();
       expect(
         messages,
         contains(
@@ -869,11 +854,10 @@
         directory: testDirectory,
         parentVirtualPath: 'root',
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains(
@@ -1028,11 +1012,10 @@
         ),
         cs.CodesignType.withoutEntitlements,
       );
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.WARNING)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.WARNING)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains(
@@ -1257,11 +1240,10 @@
         fileSystem.file('${rootDirectory.absolute.path}/temp'),
       );
       expect(uuid, '2efe2717-52ef-43a5-96dc-0797e4ca1041');
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.WARNING)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.WARNING)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(messages, contains('Failed to upload to the notary service'));
     });
 
@@ -1363,8 +1345,9 @@
         ),
         throwsA(isA<CodesignException>()),
       );
-      final messages =
-          records.map((LogRecord record) => record.message).toList();
+      final messages = records
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(messages, contains('Failed to upload to the notary service'));
     });
   });
@@ -1408,15 +1391,13 @@
             '-d',
             '${rootDirectory.absolute.path}/single_artifact',
           ],
-          onRun:
-              () =>
-                  fileSystem
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/entitlements.txt',
-                    ).createSync(recursive: true)
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/without_entitlements.txt',
-                    ).createSync(recursive: true),
+          onRun: () => fileSystem
+            ..file(
+              '${rootDirectory.path}/single_artifact/entitlements.txt',
+            ).createSync(recursive: true)
+            ..file(
+              '${rootDirectory.path}/single_artifact/without_entitlements.txt',
+            ).createSync(recursive: true),
         ),
         FakeCommand(
           command: <String>[
@@ -1462,11 +1443,10 @@
         ),
       ]);
       await codesignVisitor.validateAll();
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toList();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toList();
       expect(
         messages,
         contains(
@@ -1485,15 +1465,13 @@
             '-d',
             '${rootDirectory.absolute.path}/single_artifact',
           ],
-          onRun:
-              () =>
-                  fileSystem
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/entitlements.txt',
-                    ).createSync(recursive: true)
-                    ..file(
-                      '${rootDirectory.path}/single_artifact/without_entitlements.txt',
-                    ).createSync(recursive: true),
+          onRun: () => fileSystem
+            ..file(
+              '${rootDirectory.path}/single_artifact/entitlements.txt',
+            ).createSync(recursive: true)
+            ..file(
+              '${rootDirectory.path}/single_artifact/without_entitlements.txt',
+            ).createSync(recursive: true),
         ),
         FakeCommand(
           command: <String>[
@@ -1557,11 +1535,10 @@
       codesignVisitor.codesignTeamId = fakeTeamID;
       codesignVisitor.directoriesVisited.clear();
       await codesignVisitor.validateAll();
-      final messages =
-          records
-              .where((LogRecord record) => record.level == Level.INFO)
-              .map((LogRecord record) => record.message)
-              .toSet();
+      final messages = records
+          .where((LogRecord record) => record.level == Level.INFO)
+          .map((LogRecord record) => record.message)
+          .toSet();
       expect(
         messages,
         contains(
diff --git a/cipd_packages/codesign/test/verify_test.dart b/cipd_packages/codesign/test/verify_test.dart
index 05660b3..f64f7b1 100644
--- a/cipd_packages/codesign/test/verify_test.dart
+++ b/cipd_packages/codesign/test/verify_test.dart
@@ -38,7 +38,8 @@
     processManager.addCommands(const <FakeCommand>[
       FakeCommand(
         command: <String>['codesign', '--display', '-vv', binaryPath],
-        stderr: '''
+        stderr:
+            '''
 Executable=$binaryPath
 Identifier=mybinary
 Format=Mach-O thin (x86_64)
@@ -64,7 +65,8 @@
           '--check-notarization',
           binaryPath,
         ],
-        stderr: '''
+        stderr:
+            '''
 $binaryPath: valid on disk
 $binaryPath: satisfies its Designated Requirement
 $binaryPath: explicit requirement satisfied
@@ -87,7 +89,8 @@
     processManager.addCommands(const <FakeCommand>[
       FakeCommand(
         command: <String>['codesign', '--display', '-vv', binaryPath],
-        stderr: '''
+        stderr:
+            '''
 Executable=$binaryPath
 Identifier=mybinary
 Format=Mach-O thin (x86_64)
@@ -113,7 +116,8 @@
           '--check-notarization',
           binaryPath,
         ],
-        stderr: '''
+        stderr:
+            '''
 $binaryPath: valid on disk
 $binaryPath: satisfies its Designated Requirement
 test-requirement: code failed to satisfy specified code requirement(s)
diff --git a/cipd_packages/device_doctor/lib/src/android_device.dart b/cipd_packages/device_doctor/lib/src/android_device.dart
index aed5c32..f19bb11 100644
--- a/cipd_packages/device_doctor/lib/src/android_device.dart
+++ b/cipd_packages/device_doctor/lib/src/android_device.dart
@@ -633,15 +633,14 @@
     // Example result:
     //
     // Proc # 0: fore  T/A/T  trm: 0 4544:com.google.android.googlequicksearchbox/u0a66 (top-activity)
-    final processes =
-        results
-            .map(
-              (result) => result.substring(
-                result.lastIndexOf(':') + 1,
-                result.lastIndexOf('/'),
-              ),
-            )
-            .toList();
+    final processes = results
+        .map(
+          (result) => result.substring(
+            result.lastIndexOf(':') + 1,
+            result.lastIndexOf('/'),
+          ),
+        )
+        .toList();
     try {
       for (var process in processes) {
         await eval('adb', <String>[
diff --git a/cipd_packages/device_doctor/lib/src/ios_debug_symbol_doctor.dart b/cipd_packages/device_doctor/lib/src/ios_debug_symbol_doctor.dart
index 911faf5..fff64d3 100644
--- a/cipd_packages/device_doctor/lib/src/ios_debug_symbol_doctor.dart
+++ b/cipd_packages/device_doctor/lib/src/ios_debug_symbol_doctor.dart
@@ -99,13 +99,12 @@
   Directory get dashboardXcWorkspace {
     final cocoonRootPath = argResults!['cocoon-root'] as String;
     final cocoonRoot = fs.directory(cocoonRootPath);
-    final dashboardXcWorkspace =
-        cocoonRoot
-            .childDirectory('dashboard')
-            .childDirectory('ios')
-            .childDirectory('Runner.xcodeproj')
-            .childDirectory('project.xcworkspace')
-            .absolute;
+    final dashboardXcWorkspace = cocoonRoot
+        .childDirectory('dashboard')
+        .childDirectory('ios')
+        .childDirectory('Runner.xcodeproj')
+        .childDirectory('project.xcworkspace')
+        .absolute;
     if (!dashboardXcWorkspace.existsSync()) {
       throw StateError(
         'You provided the --cocoon-root option with "$cocoonRootPath", and the device doctor tried to '
diff --git a/cipd_packages/device_doctor/lib/src/ios_device.dart b/cipd_packages/device_doctor/lib/src/ios_device.dart
index 6f0d26e..c5edbf2 100644
--- a/cipd_packages/device_doctor/lib/src/ios_device.dart
+++ b/cipd_packages/device_doctor/lib/src/ios_device.dart
@@ -43,10 +43,9 @@
   Future<List<Device>> discoverDevices({
     Duration retryDuration = const Duration(seconds: 10),
   }) async {
-    final List<Device> discoveredDevices =
-        LineSplitter.split(
-          await deviceListOutput(),
-        ).map((String id) => IosDevice(deviceId: id)).toList();
+    final List<Device> discoveredDevices = LineSplitter.split(
+      await deviceListOutput(),
+    ).map((String id) => IosDevice(deviceId: id)).toList();
     stdout.write(
       'ios devices discovered: ${discoveredDevices.map((e) => e.deviceId).toList()}',
     );
@@ -349,8 +348,10 @@
       return true;
     }
     final results = result.trim().split('\n');
-    final bundleIdentifiers =
-        results.sublist(1).map((e) => e.split(',')[0].trim()).toList();
+    final bundleIdentifiers = results
+        .sublist(1)
+        .map((e) => e.split(',')[0].trim())
+        .toList();
     try {
       for (var bundleIdentifier in bundleIdentifiers) {
         await eval(fullPathIdeviceInstaller, <String>[
diff --git a/cipd_packages/device_doctor/pubspec.yaml b/cipd_packages/device_doctor/pubspec.yaml
index efa5c70..78edce5 100644
--- a/cipd_packages/device_doctor/pubspec.yaml
+++ b/cipd_packages/device_doctor/pubspec.yaml
@@ -3,7 +3,7 @@
 version: 1.0.1
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   args: 2.7.0
diff --git a/cipd_packages/device_doctor/test/src/ios_debug_symbol_doctor_test.dart b/cipd_packages/device_doctor/test/src/ios_debug_symbol_doctor_test.dart
index 85ed5ea..4c91f65 100644
--- a/cipd_packages/device_doctor/test/src/ios_debug_symbol_doctor_test.dart
+++ b/cipd_packages/device_doctor/test/src/ios_debug_symbol_doctor_test.dart
@@ -345,7 +345,8 @@
   }
 ]''';
 
-String _jsonWithErrors(String name) => '''
+String _jsonWithErrors(String name) =>
+    '''
 [
   {
     "modelCode" : "iPhone8,1",
@@ -370,7 +371,8 @@
 ]
 ''';
 
-String _jsonWithPreparingErrors(String name) => '''
+String _jsonWithPreparingErrors(String name) =>
+    '''
 [
   {
     "modelCode" : "iPhone8,1",
diff --git a/cipd_packages/device_doctor/test/src/ios_device_test.dart b/cipd_packages/device_doctor/test/src/ios_device_test.dart
index 9b0662a..2d4d727 100644
--- a/cipd_packages/device_doctor/test/src/ios_device_test.dart
+++ b/cipd_packages/device_doctor/test/src/ios_device_test.dart
@@ -289,7 +289,8 @@
         lsProcess = FakeProcess(0, out: lsOutput);
 
         const deviceID = 'deviceId';
-        const profileContent = '''<array>
+        const profileContent =
+            '''<array>
         <string>test1</string>
         <string>$deviceID</string>
         <string>test2</string>
diff --git a/dashboard/lib/logic/task_grid_filter.dart b/dashboard/lib/logic/task_grid_filter.dart
index 00a795c..f17e5e3 100644
--- a/dashboard/lib/logic/task_grid_filter.dart
+++ b/dashboard/lib/logic/task_grid_filter.dart
@@ -272,24 +272,23 @@
   /// Return the list of properties of this filter in a form that can be used by a
   /// [FilterPropertySheet] to display the fields to a user and allow them to edit the values.
   @override
-  List<FilterPropertyNode> get sheetLayout =>
-      _layout ??= <FilterPropertyNode>[
-        _taskProperty,
-        _authorProperty,
-        _messageProperty,
-        _hashProperty,
-        BoolFilterPropertyGroup(
-          label: 'Stages',
-          members: <BoolFilterProperty>[
-            _androidProperty,
-            _iosProperty,
-            _linuxPorperty,
-            _macProperty,
-            _windowsPorperty,
-            _bringUpProperty,
-          ],
-        ),
-      ];
+  List<FilterPropertyNode> get sheetLayout => _layout ??= <FilterPropertyNode>[
+    _taskProperty,
+    _authorProperty,
+    _messageProperty,
+    _hashProperty,
+    BoolFilterPropertyGroup(
+      label: 'Stages',
+      members: <BoolFilterProperty>[
+        _androidProperty,
+        _iosProperty,
+        _linuxPorperty,
+        _macProperty,
+        _windowsPorperty,
+        _bringUpProperty,
+      ],
+    ),
+  ];
 
   // [_allProperties] is a LinkedHashMap so we can trust its iteration order
   String get _values => _allProperties.values
diff --git a/dashboard/lib/service/dev_cocoon.dart b/dashboard/lib/service/dev_cocoon.dart
index 670c1a5..5aeba77 100644
--- a/dashboard/lib/service/dev_cocoon.dart
+++ b/dashboard/lib/service/dev_cocoon.dart
@@ -226,10 +226,9 @@
     String? branch,
   }) {
     branch ??= defaultBranches[repo]!;
-    final baseTimestamp =
-        lastCommitStatus != null
-            ? (lastCommitStatus.commit.timestamp.toInt())
-            : now.millisecondsSinceEpoch;
+    final baseTimestamp = lastCommitStatus != null
+        ? (lastCommitStatus.commit.timestamp.toInt())
+        : now.millisecondsSinceEpoch;
     final result = <CommitStatus>[];
     for (var index = 0; index < 25; index += 1) {
       final commitTimestamp = baseTimestamp - ((index + 1) * _commitGap);
@@ -487,8 +486,8 @@
     final buildNumberList = List.generate(
       attempts > 1
           ? random.nextBool()
-              ? attempts
-              : attempts - 1
+                ? attempts
+                : attempts - 1
           : 1,
       (i) => i,
     );
@@ -500,8 +499,9 @@
 
       builderName: 'Linux_android $index',
       attempts: attempts,
-      currentBuildNumber:
-          attempts == buildNumberList.length ? buildNumberList.last : null,
+      currentBuildNumber: attempts == buildNumberList.length
+          ? buildNumberList.last
+          : null,
       buildNumberList: buildNumberList,
       isBringup: index == now.millisecondsSinceEpoch % 13,
 
diff --git a/dashboard/lib/state/build.dart b/dashboard/lib/state/build.dart
index e28211d..6978b85 100644
--- a/dashboard/lib/state/build.dart
+++ b/dashboard/lib/state/build.dart
@@ -277,10 +277,9 @@
     /// there will be no subset of remaining statuses. Instead, it will give
     /// a list with a null generated [CommitStatus]. Therefore we manually
     /// return an empty list.
-    final remainingStatuses =
-        (firstIndex < lastIndex)
-            ? _statuses.getRange(firstIndex, lastIndex).toList()
-            : <CommitStatus>[];
+    final remainingStatuses = (firstIndex < lastIndex)
+        ? _statuses.getRange(firstIndex, lastIndex).toList()
+        : <CommitStatus>[];
 
     mergedStatuses.addAll(remainingStatuses);
 
diff --git a/dashboard/lib/views/build_dashboard_page.dart b/dashboard/lib/views/build_dashboard_page.dart
index 16f6a88..f9de9eb 100644
--- a/dashboard/lib/views/build_dashboard_page.dart
+++ b/dashboard/lib/views/build_dashboard_page.dart
@@ -124,8 +124,9 @@
 
   Widget _settingsDialog(BuildContext context, BuildState buildState) {
     final theme = Theme.of(context);
-    final backgroundColor =
-        theme.brightness == Brightness.dark ? Colors.grey[800]! : Colors.white;
+    final backgroundColor = theme.brightness == Brightness.dark
+        ? Colors.grey[800]!
+        : Colors.white;
     return Center(
       child: Container(
         decoration: BoxDecoration(
@@ -146,10 +147,9 @@
                     final isAuthenticated =
                         buildState.authService.isAuthenticated;
                     return TextButton(
-                      onPressed:
-                          isAuthenticated
-                              ? buildState.refreshGitHubCommits
-                              : null,
+                      onPressed: isAuthenticated
+                          ? buildState.refreshGitHubCommits
+                          : null,
                       child: child!,
                     );
                   },
@@ -164,15 +164,15 @@
                   mainAxisAlignment: MainAxisAlignment.center,
                   children: <Widget>[
                     TextButton(
-                      onPressed:
-                          _filter!.isDefault ? null : () => _filter!.reset(),
+                      onPressed: _filter!.isDefault
+                          ? null
+                          : () => _filter!.reset(),
                       child: const Text('Defaults'),
                     ),
                     TextButton(
-                      onPressed:
-                          _filter == _settingsBasis
-                              ? null
-                              : () => _updateNavigation(context),
+                      onPressed: _filter == _settingsBasis
+                          ? null
+                          : () => _updateNavigation(context),
                       child: const Text('Apply'),
                     ),
                     TextButton(
@@ -221,22 +221,21 @@
           repo = selectedRepo;
           _updateNavigation(context);
         },
-        items:
-            buildState.repos.map<DropdownMenuItem<String>>((String value) {
-              return DropdownMenuItem<String>(
-                value: value,
-                child: Padding(
-                  padding: const EdgeInsets.only(top: 11),
-                  child: Center(
-                    child: Text(
-                      value,
-                      style: theme.primaryTextTheme.bodyLarge,
-                      textAlign: TextAlign.center,
-                    ),
-                  ),
+        items: buildState.repos.map<DropdownMenuItem<String>>((String value) {
+          return DropdownMenuItem<String>(
+            value: value,
+            child: Padding(
+              padding: const EdgeInsets.only(top: 11),
+              child: Center(
+                child: Text(
+                  value,
+                  style: theme.primaryTextTheme.bodyLarge,
+                  textAlign: TextAlign.center,
                 ),
-              );
-            }).toList(),
+              ),
+            ),
+          );
+        }).toList(),
       ),
       const Padding(
         padding: EdgeInsets.only(top: 22, left: 5, right: 5),
@@ -414,100 +413,97 @@
     buildState.updateCurrentRepoBranch(repo!, branch!);
     return CallbackShortcuts(
       bindings: <ShortcutActivator, VoidCallback>{
-        const SingleActivator(LogicalKeyboardKey.arrowUp):
-            () => _updatePage(context, 'flutter', 'master'),
-        const SingleActivator(LogicalKeyboardKey.arrowLeft):
-            () => _updatePage(context, 'cocoon', 'main'),
-        const SingleActivator(LogicalKeyboardKey.arrowRight):
-            () => _updatePage(context, 'packages', 'main'),
+        const SingleActivator(LogicalKeyboardKey.arrowUp): () =>
+            _updatePage(context, 'flutter', 'master'),
+        const SingleActivator(LogicalKeyboardKey.arrowLeft): () =>
+            _updatePage(context, 'cocoon', 'main'),
+        const SingleActivator(LogicalKeyboardKey.arrowRight): () =>
+            _updatePage(context, 'packages', 'main'),
       },
       child: Focus(
         autofocus: true,
         child: AnimatedBuilder(
           animation: buildState,
-          builder:
-              (BuildContext context, Widget? _) => Scaffold(
-                appBar: CocoonAppBar(
-                  title: Tooltip(
-                    message: _getStatusTitle(buildState),
-                    child: SelectionArea(
-                      child: Text(_getStatusTitle(buildState)),
-                    ),
-                  ),
-                  backgroundColor: colorTable[buildState.isTreeBuilding],
-                  actions: <Widget>[
-                    if (!_smallScreen)
-                      ..._buildRepositorySelectionWidgets(context, buildState),
-                    IconButton(
-                      tooltip: 'Infra Ticket Queue',
-                      icon: const Icon(Icons.queue),
-                      onPressed: () async {
-                        if (await canLaunchUrl(flutterInfraTicketQueue)) {
-                          await launchUrl(flutterInfraTicketQueue);
-                        } else {
-                          throw 'Could not launch $flutterInfraTicketQueue';
-                        }
-                      },
-                    ),
-                    IconButton(
-                      tooltip: 'Report Issue',
-                      icon: const Icon(Icons.bug_report),
-                      onPressed: () async {
-                        if (await canLaunchUrl(flutterIssueUrl)) {
-                          await launchUrl(flutterIssueUrl);
-                        } else {
-                          throw 'Could not launch $flutterIssueUrl';
-                        }
-                      },
-                    ),
-                    PopupMenuButton<String>(
-                      tooltip: 'Task Status Key',
-                      child: const Icon(Icons.info_outline),
-                      itemBuilder:
-                          (BuildContext context) => _getTaskKey(isDark),
-                    ),
-                    IconButton(
-                      tooltip: 'Settings',
-                      icon: const Icon(Icons.settings),
-                      onPressed:
-                          _settingsBasis == null ? _showSettingsDialog : null,
-                    ),
-                  ],
-                ),
-                body: ErrorBrookWatcher(
-                  errors: buildState.errors,
-                  child: Stack(
-                    children: <Widget>[
-                      SizedBox.expand(
-                        child: TaskGridContainer(
-                          filter: _filter,
-                          useAnimatedLoading: true,
-                          schedulePostsubmitBuildForReleaseBranch: () {
-                            if (!buildState.authService.isAuthenticated) {
-                              return null;
-                            }
-                            if (buildState.currentRepo != 'flutter') {
-                              return null;
-                            }
-                            if (buildState.currentBranch == 'master') {
-                              return null;
-                            }
-                            return (Commit commit) async {
-                              return _schedulePostsubmitBuildForReleaseBranch(
-                                context: context,
-                                commit: commit,
-                              );
-                            };
-                          }(),
-                        ),
-                      ),
-                      if (_settingsBasis != null)
-                        _settingsDialog(context, buildState),
-                    ],
-                  ),
-                ),
-                drawer: const DashboardNavigationDrawer(),
+          builder: (BuildContext context, Widget? _) => Scaffold(
+            appBar: CocoonAppBar(
+              title: Tooltip(
+                message: _getStatusTitle(buildState),
+                child: SelectionArea(child: Text(_getStatusTitle(buildState))),
               ),
+              backgroundColor: colorTable[buildState.isTreeBuilding],
+              actions: <Widget>[
+                if (!_smallScreen)
+                  ..._buildRepositorySelectionWidgets(context, buildState),
+                IconButton(
+                  tooltip: 'Infra Ticket Queue',
+                  icon: const Icon(Icons.queue),
+                  onPressed: () async {
+                    if (await canLaunchUrl(flutterInfraTicketQueue)) {
+                      await launchUrl(flutterInfraTicketQueue);
+                    } else {
+                      throw 'Could not launch $flutterInfraTicketQueue';
+                    }
+                  },
+                ),
+                IconButton(
+                  tooltip: 'Report Issue',
+                  icon: const Icon(Icons.bug_report),
+                  onPressed: () async {
+                    if (await canLaunchUrl(flutterIssueUrl)) {
+                      await launchUrl(flutterIssueUrl);
+                    } else {
+                      throw 'Could not launch $flutterIssueUrl';
+                    }
+                  },
+                ),
+                PopupMenuButton<String>(
+                  tooltip: 'Task Status Key',
+                  child: const Icon(Icons.info_outline),
+                  itemBuilder: (BuildContext context) => _getTaskKey(isDark),
+                ),
+                IconButton(
+                  tooltip: 'Settings',
+                  icon: const Icon(Icons.settings),
+                  onPressed: _settingsBasis == null
+                      ? _showSettingsDialog
+                      : null,
+                ),
+              ],
+            ),
+            body: ErrorBrookWatcher(
+              errors: buildState.errors,
+              child: Stack(
+                children: <Widget>[
+                  SizedBox.expand(
+                    child: TaskGridContainer(
+                      filter: _filter,
+                      useAnimatedLoading: true,
+                      schedulePostsubmitBuildForReleaseBranch: () {
+                        if (!buildState.authService.isAuthenticated) {
+                          return null;
+                        }
+                        if (buildState.currentRepo != 'flutter') {
+                          return null;
+                        }
+                        if (buildState.currentBranch == 'master') {
+                          return null;
+                        }
+                        return (Commit commit) async {
+                          return _schedulePostsubmitBuildForReleaseBranch(
+                            context: context,
+                            commit: commit,
+                          );
+                        };
+                      }(),
+                    ),
+                  ),
+                  if (_settingsBasis != null)
+                    _settingsDialog(context, buildState),
+                ],
+              ),
+            ),
+            drawer: const DashboardNavigationDrawer(),
+          ),
         ),
       ),
     );
diff --git a/dashboard/lib/views/tree_status_page.dart b/dashboard/lib/views/tree_status_page.dart
index bef6530..62d2fdb 100644
--- a/dashboard/lib/views/tree_status_page.dart
+++ b/dashboard/lib/views/tree_status_page.dart
@@ -102,20 +102,19 @@
                   await buildState.cocoonService.updateTreeStatus(
                     idToken: await buildState.authService.idToken,
                     repo: buildState.currentRepo,
-                    status:
-                        markedFailing ? TreeStatus.success : TreeStatus.failure,
+                    status: markedFailing
+                        ? TreeStatus.success
+                        : TreeStatus.failure,
                     reason: reason,
                   );
                   await _fetchTreeStatusChanges();
                 },
-                label:
-                    markedFailing
-                        ? const Text('Enable Tree')
-                        : const Text('Disable Tree'),
-                icon:
-                    markedFailing
-                        ? const Icon(Icons.check, color: Colors.green)
-                        : const Icon(Icons.close, color: Colors.red),
+                label: markedFailing
+                    ? const Text('Enable Tree')
+                    : const Text('Disable Tree'),
+                icon: markedFailing
+                    ? const Icon(Icons.check, color: Colors.green)
+                    : const Icon(Icons.close, color: Colors.red),
               ),
             ],
           ),
@@ -123,10 +122,9 @@
             delegate: SliverChildBuilderDelegate((_, i) {
               final item = changes[i];
               return ListTile(
-                leading:
-                    item.status == TreeStatus.success
-                        ? const Icon(Icons.check, color: Colors.green)
-                        : const Icon(Icons.error, color: Colors.red),
+                leading: item.status == TreeStatus.success
+                    ? const Icon(Icons.check, color: Colors.green)
+                    : const Icon(Icons.error, color: Colors.red),
                 title: Text(item.authoredBy),
                 subtitle: Text(
                   item.reason != null ? 'Reason: ${item.reason}' : '',
diff --git a/dashboard/lib/widgets/commit_author_avatar.dart b/dashboard/lib/widgets/commit_author_avatar.dart
index dbc5850..a11c31a 100644
--- a/dashboard/lib/widgets/commit_author_avatar.dart
+++ b/dashboard/lib/widgets/commit_author_avatar.dart
@@ -29,8 +29,9 @@
     final themeValue = HSVColor.fromColor(theme.colorScheme.surface).value;
     var authorColor = HSVColor.fromAHSV(1.0, hue, 0.4, themeValue).toColor();
     if (theme.brightness == Brightness.dark) {
-      authorColor =
-          HSLColor.fromColor(authorColor).withLightness(.65).toColor();
+      authorColor = HSLColor.fromColor(
+        authorColor,
+      ).withLightness(.65).toColor();
     }
 
     /// Fallback widget that shows the initial of the commit author. In cases
@@ -40,10 +41,9 @@
       child: Text(
         authorInitial,
         style: TextStyle(
-          color:
-              authorColor.computeLuminance() > 0.25
-                  ? Colors.black
-                  : Colors.white,
+          color: authorColor.computeLuminance() > 0.25
+              ? Colors.black
+              : Colors.white,
         ),
       ),
     );
diff --git a/dashboard/lib/widgets/commit_box.dart b/dashboard/lib/widgets/commit_box.dart
index e1c72b9..cf0494a 100644
--- a/dashboard/lib/widgets/commit_box.dart
+++ b/dashboard/lib/widgets/commit_box.dart
@@ -54,13 +54,12 @@
 
   void _handleTap() {
     _commitOverlay = OverlayEntry(
-      builder:
-          (_) => CommitOverlayContents(
-            parentContext: context,
-            commit: widget.commit,
-            closeCallback: _closeOverlay,
-            schedulePostsubmitBuild: widget.schedulePostsubmitBuild,
-          ),
+      builder: (_) => CommitOverlayContents(
+        parentContext: context,
+        commit: widget.commit,
+        closeCallback: _closeOverlay,
+        schedulePostsubmitBuild: widget.schedulePostsubmitBuild,
+      ),
     );
 
     Overlay.of(context).insert(_commitOverlay!);
@@ -153,12 +152,11 @@
                                   ),
                                   IconButton(
                                     icon: const Icon(Icons.copy),
-                                    onPressed:
-                                        () => unawaited(
-                                          Clipboard.setData(
-                                            ClipboardData(text: commit.sha),
-                                          ),
-                                        ),
+                                    onPressed: () => unawaited(
+                                      Clipboard.setData(
+                                        ClipboardData(text: commit.sha),
+                                      ),
+                                    ),
                                   ),
                                 ],
                               ),
@@ -180,12 +178,11 @@
                           SelectableText(commit.author.login),
                           Tooltip(
                             key: const ValueKey('schedulePostsubmit'),
-                            message:
-                                schedulePostsubmitBuild == null
-                                    ? 'Only enabled for release branches'
-                                    : ''
-                                        'For release branches, the post-submit artifacts are not '
-                                        'immediately available and must be manually scheduled.',
+                            message: schedulePostsubmitBuild == null
+                                ? 'Only enabled for release branches'
+                                : ''
+                                      'For release branches, the post-submit artifacts are not '
+                                      'immediately available and must be manually scheduled.',
                             child: Padding(
                               padding: const EdgeInsets.only(top: 8.0),
                               child: ProgressButton(
diff --git a/dashboard/lib/widgets/filter_property_sheet.dart b/dashboard/lib/widgets/filter_property_sheet.dart
index 5d37ad8..86be639 100644
--- a/dashboard/lib/widgets/filter_property_sheet.dart
+++ b/dashboard/lib/widgets/filter_property_sheet.dart
@@ -131,16 +131,11 @@
   /// The value of this property as a [RegExp] object, useful for matching its pattern
   /// against candidate values in the list being filtered.
   RegExp? _regExp;
-  RegExp? get regExp =>
-      _regExp ??=
-          _value == null
-              ? null
-              : RegExp(_value!, caseSensitive: _caseSensitive);
-  set regExp(RegExp? newRegExp) =>
-      value =
-          newRegExp == null || newRegExp.pattern == ''
-              ? null
-              : newRegExp.pattern;
+  RegExp? get regExp => _regExp ??= _value == null
+      ? null
+      : RegExp(_value!, caseSensitive: _caseSensitive);
+  set regExp(RegExp? newRegExp) => value =
+      newRegExp == null || newRegExp.pattern == '' ? null : newRegExp.pattern;
 
   /// True iff the value, interpreted as a regular expression, matches the candidate [String].
   bool matches(String candidate) => regExp?.hasMatch(candidate) ?? true;
@@ -335,8 +330,9 @@
             0: IntrinsicColumnWidth(),
             1: FixedColumnWidth(300.0),
           },
-          children:
-              widget.propertySource!.sheetLayout.map(_makeTableRow).toList(),
+          children: widget.propertySource!.sheetLayout
+              .map(_makeTableRow)
+              .toList(),
         ),
       ],
     );
diff --git a/dashboard/lib/widgets/lattice.dart b/dashboard/lib/widgets/lattice.dart
index f444381..b7f39e8 100644
--- a/dashboard/lib/widgets/lattice.dart
+++ b/dashboard/lib/widgets/lattice.dart
@@ -76,11 +76,9 @@
               BuildContext context,
               ViewportOffset horizontalOffset,
             ) => NotificationListener<OverscrollNotification>(
-              onNotification:
-                  (notification) =>
-                      notification.metrics.axisDirection !=
-                          AxisDirection.right &&
-                      notification.metrics.axisDirection != AxisDirection.left,
+              onNotification: (notification) =>
+                  notification.metrics.axisDirection != AxisDirection.right &&
+                  notification.metrics.axisDirection != AxisDirection.left,
               child: Scrollbar(
                 thumbVisibility: true,
                 controller: verticalController,
@@ -578,10 +576,9 @@
     super.attach(owner);
     _horizontalOffset.addListener(_handleOffsetChange);
     _verticalOffset.addListener(_handleOffsetChange);
-    _tap =
-        TapGestureRecognizer(debugOwner: this)
-          ..onTapDown = _handleTapDown
-          ..onTapUp = _handleTapUp;
+    _tap = TapGestureRecognizer(debugOwner: this)
+      ..onTapDown = _handleTapDown
+      ..onTapUp = _handleTapUp;
     for (final child in _childrenByCoordinate.values) {
       child.attach(owner);
     }
diff --git a/dashboard/lib/widgets/progress_button.dart b/dashboard/lib/widgets/progress_button.dart
index 3904def..f4518ae 100644
--- a/dashboard/lib/widgets/progress_button.dart
+++ b/dashboard/lib/widgets/progress_button.dart
@@ -58,11 +58,11 @@
         ElevatedButton(
           onPressed:
               _busy // dartfmt will soon require this new formatting
-                  ? null
-                  : widget.onPressed !=
-                      null // dartfmt will soon require this new formatting
-                  ? _handlePressed
-                  : null,
+              ? null
+              : widget.onPressed !=
+                    null // dartfmt will soon require this new formatting
+              ? _handlePressed
+              : null,
           child: widget.child,
         ),
         if (_busy)
diff --git a/dashboard/lib/widgets/sign_in_button/sign_in_button_native.dart b/dashboard/lib/widgets/sign_in_button/sign_in_button_native.dart
index fb551ec..1c6d5f4 100644
--- a/dashboard/lib/widgets/sign_in_button/sign_in_button_native.dart
+++ b/dashboard/lib/widgets/sign_in_button/sign_in_button_native.dart
@@ -14,10 +14,9 @@
   @override
   Widget build(BuildContext context) {
     final authService = Provider.of<FirebaseAuthService>(context);
-    final textButtonForeground =
-        Theme.of(context).brightness == Brightness.dark
-            ? Colors.white
-            : Colors.black87;
+    final textButtonForeground = Theme.of(context).brightness == Brightness.dark
+        ? Colors.white
+        : Colors.black87;
 
     return TextButton(
       style: TextButton.styleFrom(foregroundColor: textButtonForeground),
diff --git a/dashboard/lib/widgets/task_grid.dart b/dashboard/lib/widgets/task_grid.dart
index 80196b0..d6ac75c 100644
--- a/dashboard/lib/widgets/task_grid.dart
+++ b/dashboard/lib/widgets/task_grid.dart
@@ -218,17 +218,14 @@
     var filter = taskGrid.filter;
     filter ??= TaskGridFilter();
     // 1: PREPARE ROWS
-    final filteredStatuses =
-        taskGrid.commitStatuses
-            .where(
-              (CommitStatus commitStatus) =>
-                  filter!.matchesCommit(commitStatus),
-            )
-            .toList();
-    final rows =
-        filteredStatuses
-            .map<_Row>((CommitStatus commitStatus) => _Row(commitStatus.commit))
-            .toList();
+    final filteredStatuses = taskGrid.commitStatuses
+        .where(
+          (CommitStatus commitStatus) => filter!.matchesCommit(commitStatus),
+        )
+        .toList();
+    final rows = filteredStatuses
+        .map<_Row>((CommitStatus commitStatus) => _Row(commitStatus.commit))
+        .toList();
     // 2: WALK ALL TASKS
     final scores = <QualifiedTask, double>{};
     final taskLookupMap = <QualifiedTask, Task>{};
@@ -256,10 +253,9 @@
             weightStatus += ' - Rerun';
           }
           // Make the score relative to how long ago it was run.
-          final score =
-              _statusScores.containsKey(weightStatus)
-                  ? _statusScores[weightStatus]! / commitCount
-                  : _statusScores['Unknown']! / commitCount;
+          final score = _statusScores.containsKey(weightStatus)
+              ? _statusScores[weightStatus]! / commitCount
+              : _statusScores['Unknown']! / commitCount;
           scores.update(
             qualifiedTask,
             (double value) => value += score,
@@ -279,14 +275,14 @@
       }
     }
     // 3: SORT
-    final tasks =
-        scores.keys.toList()..sort((QualifiedTask a, QualifiedTask b) {
-          final scoreComparison = scores[b]!.compareTo(scores[a]!);
-          if (scoreComparison != 0) {
-            return scoreComparison;
-          }
-          return a.task.compareTo(b.task);
-        });
+    final tasks = scores.keys.toList()
+      ..sort((QualifiedTask a, QualifiedTask b) {
+        final scoreComparison = scores[b]!.compareTo(scores[a]!);
+        if (scoreComparison != 0) {
+          return scoreComparison;
+        }
+        return a.task.compareTo(b.task);
+      });
 
     // 4: GENERATE RESULTING LIST OF LISTS
     return <List<LatticeCell>>[
@@ -302,17 +298,16 @@
       ...rows.map<List<LatticeCell>>(
         (_Row row) => <LatticeCell>[
           LatticeCell(
-            builder:
-                (BuildContext context) => CommitBox(
-                  commit: row.commit,
-                  schedulePostsubmitBuild: () {
-                    if (widget.schedulePostsubmitBuildForReleaseBranch
-                        case final schedule?) {
-                      return () async => schedule(row.commit);
-                    }
-                    return null;
-                  }(),
-                ),
+            builder: (BuildContext context) => CommitBox(
+              commit: row.commit,
+              schedulePostsubmitBuild: () {
+                if (widget.schedulePostsubmitBuildForReleaseBranch
+                    case final schedule?) {
+                  return () async => schedule(row.commit);
+                }
+                return null;
+              }(),
+            ),
           ),
           ...tasks.map<LatticeCell>(
             (QualifiedTask task) => row.cells[task] ?? const LatticeCell(),
@@ -332,10 +327,9 @@
       'Unknown or unexpected status: ${task.status}',
     );
 
-    var color =
-        TaskBox.statusColor.containsKey(task.status)
-            ? TaskBox.statusColor[task.status]!
-            : Colors.transparent;
+    var color = TaskBox.statusColor.containsKey(task.status)
+        ? TaskBox.statusColor[task.status]!
+        : Colors.transparent;
     if (task.status == TaskStatus.inProgress) {
       if (task.lastAttemptFailed) {
         color = TaskBox.statusColorFailedAndRerunning;
@@ -384,8 +378,9 @@
     return null;
   }
 
-  static final List<String> _loadingMessage =
-      'LOADING...'.runes.map<String>(String.fromCharCode).toList();
+  static final List<String> _loadingMessage = 'LOADING...'.runes
+      .map<String>(String.fromCharCode)
+      .toList();
 
   List<LatticeCell> _generateLoadingRow(int length) {
     return <LatticeCell>[
@@ -395,12 +390,9 @@
             fit: BoxFit.contain,
             child: Padding(
               padding: const EdgeInsets.all(12),
-              child:
-                  widget.useAnimatedLoading
-                      ? const RepaintBoundary(
-                        child: CircularProgressIndicator(),
-                      )
-                      : const Icon(Icons.refresh),
+              child: widget.useAnimatedLoading
+                  ? const RepaintBoundary(child: CircularProgressIndicator())
+                  : const Icon(Icons.refresh),
             ),
           );
         },
@@ -430,19 +422,18 @@
     return (Offset? localPosition) {
       _taskOverlay?.remove();
       _taskOverlay = OverlayEntry(
-        builder:
-            (BuildContext context) => TaskOverlayEntry(
-              position: (this.context.findRenderObject() as RenderBox)
-                  .localToGlobal(
-                    localPosition!,
-                    ancestor: Overlay.of(context).context.findRenderObject(),
-                  ),
-              task: task,
-              showSnackBarCallback: ScaffoldMessenger.of(context).showSnackBar,
-              closeCallback: _closeOverlay,
-              buildState: widget.buildState,
-              commit: commit,
-            ),
+        builder: (BuildContext context) => TaskOverlayEntry(
+          position: (this.context.findRenderObject() as RenderBox)
+              .localToGlobal(
+                localPosition!,
+                ancestor: Overlay.of(context).context.findRenderObject(),
+              ),
+          task: task,
+          showSnackBarCallback: ScaffoldMessenger.of(context).showSnackBar,
+          closeCallback: _closeOverlay,
+          buildState: widget.buildState,
+          commit: commit,
+        ),
       );
       Overlay.of(context).insert(_taskOverlay!);
     };
diff --git a/dashboard/lib/widgets/user_sign_in.dart b/dashboard/lib/widgets/user_sign_in.dart
index bcf62ca..3919f7e 100644
--- a/dashboard/lib/widgets/user_sign_in.dart
+++ b/dashboard/lib/widgets/user_sign_in.dart
@@ -33,8 +33,8 @@
         if (authService.user != null) {
           return PopupMenuButton<_SignInButtonAction>(
             offset: const Offset(0, 50),
-            itemBuilder:
-                (BuildContext context) => <PopupMenuEntry<_SignInButtonAction>>[
+            itemBuilder: (BuildContext context) =>
+                <PopupMenuEntry<_SignInButtonAction>>[
                   const PopupMenuItem<_SignInButtonAction>(
                     value: _SignInButtonAction.logout,
                     child: Text('Log out'),
diff --git a/dashboard/pubspec.yaml b/dashboard/pubspec.yaml
index 5dd0cd4..63197f8 100644
--- a/dashboard/pubspec.yaml
+++ b/dashboard/pubspec.yaml
@@ -8,7 +8,7 @@
 version: 1.1.0+2
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   cocoon_common:
diff --git a/dashboard/test/build_dashboard_page_test.dart b/dashboard/test/build_dashboard_page_test.dart
index 3d2053e..77cdc6b 100644
--- a/dashboard/test/build_dashboard_page_test.dart
+++ b/dashboard/test/build_dashboard_page_test.dart
@@ -34,11 +34,10 @@
 void main() {
   late MockFirebaseAuthService fakeAuthService;
 
-  final dropdownButtonType =
-      DropdownButton<String>(
-        onChanged: (_) {},
-        items: const <DropdownMenuItem<String>>[],
-      ).runtimeType;
+  final dropdownButtonType = DropdownButton<String>(
+    onChanged: (_) {},
+    items: const <DropdownMenuItem<String>>[],
+  ).runtimeType;
 
   void configureView(TestFlutterView view) {
     // device pixel ratio of 1.0 works well on web app and emulator
@@ -108,8 +107,8 @@
 
   testWidgets('shows settings button', (WidgetTester tester) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -129,8 +128,8 @@
 
   testWidgets('shows infra ticket queue button', (WidgetTester tester) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -150,8 +149,8 @@
 
   testWidgets('shows file a bug button', (WidgetTester tester) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -171,8 +170,8 @@
 
   testWidgets('shows key button & legend', (WidgetTester tester) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -203,8 +202,8 @@
     'shows branch and repo dropdown button when screen is decently large',
     (WidgetTester tester) async {
       configureView(tester.view);
-      final BuildState fakeBuildState =
-          FakeBuildState()..authService = fakeAuthService;
+      final BuildState fakeBuildState = FakeBuildState()
+        ..authService = fakeAuthService;
 
       await tester.pumpWidget(
         MaterialApp(
@@ -243,8 +242,8 @@
     'shows enabled Refresh GitHub Commits button when isAuthenticated',
     (WidgetTester tester) async {
       configureView(tester.view);
-      final BuildState fakeBuildState =
-          FakeBuildState()..authService = fakeAuthService;
+      final BuildState fakeBuildState = FakeBuildState()
+        ..authService = fakeAuthService;
 
       await tester.pumpWidget(
         MaterialApp(
@@ -270,10 +269,9 @@
 
       expect(labelFinder, findsOneWidget);
 
-      final button =
-          tester
-              .element(labelFinder)
-              .findAncestorWidgetOfExactType<TextButton>()!;
+      final button = tester
+          .element(labelFinder)
+          .findAncestorWidgetOfExactType<TextButton>()!;
 
       expect(
         button.onPressed,
@@ -287,8 +285,8 @@
     'shows disabled Refresh GitHub Commits button when !isAuthenticated',
     (WidgetTester tester) async {
       configureView(tester.view);
-      final BuildState fakeBuildState =
-          FakeBuildState()..authService = fakeAuthService;
+      final BuildState fakeBuildState = FakeBuildState()
+        ..authService = fakeAuthService;
       when(fakeAuthService.isAuthenticated).thenReturn(false);
 
       await tester.pumpWidget(
@@ -312,10 +310,9 @@
       ); // Finish the menu animation.
 
       final labelFinder = find.text('Refresh GitHub Commits');
-      final button =
-          tester
-              .element(labelFinder)
-              .findAncestorWidgetOfExactType<TextButton>()!;
+      final button = tester
+          .element(labelFinder)
+          .findAncestorWidgetOfExactType<TextButton>()!;
 
       expect(
         button.onPressed,
@@ -329,10 +326,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = null
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = null
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -358,10 +354,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = null
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = null
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -387,10 +382,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = false
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = false
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -421,10 +415,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = false
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = false
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -455,10 +448,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = true
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = true
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -484,10 +476,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = true
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = true
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -514,10 +505,9 @@
   ) async {
     configureView(tester.view);
     String? lastError;
-    final buildState =
-        FakeBuildState()
-          ..errors.addListener((String message) => lastError = message)
-          ..authService = fakeAuthService;
+    final buildState = FakeBuildState()
+      ..errors.addListener((String message) => lastError = message)
+      ..authService = fakeAuthService;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -640,8 +630,8 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..authService = fakeAuthService;
     var controlledBuildDashboardPage = const BuildDashboardPage(
       queryParameters: {'repo': 'cocoon', 'branch': 'flutter-release'},
     );
@@ -685,8 +675,8 @@
       tester.view.physicalSize = const Size(500, 500);
       tester.view.devicePixelRatio = 1.0;
       addTearDown(tester.view.reset);
-      final BuildState fakeBuildState =
-          FakeBuildState()..authService = fakeAuthService;
+      final BuildState fakeBuildState = FakeBuildState()
+        ..authService = fakeAuthService;
 
       await tester.pumpWidget(
         MaterialApp(
@@ -714,10 +704,9 @@
     WidgetTester tester,
   ) async {
     configureView(tester.view);
-    final BuildState fakeBuildState =
-        FakeBuildState()
-          ..isTreeBuilding = true
-          ..authService = fakeAuthService;
+    final BuildState fakeBuildState = FakeBuildState()
+      ..isTreeBuilding = true
+      ..authService = fakeAuthService;
     const dialogText = 'Refresh GitHub Commits';
     ThemeData theme;
     Widget buildDashboard({required Brightness brightness}) {
diff --git a/dashboard/test/logic/task_grid_filter_test.dart b/dashboard/test/logic/task_grid_filter_test.dart
index b98bb84..d8b4395 100644
--- a/dashboard/test/logic/task_grid_filter_test.dart
+++ b/dashboard/test/logic/task_grid_filter_test.dart
@@ -47,13 +47,19 @@
     );
     expect(
       filter.matchesCommit(
-        CommitStatus(commit: generateCommitForTest(author: 'joe'), tasks: []),
+        CommitStatus(
+          commit: generateCommitForTest(author: 'joe'),
+          tasks: [],
+        ),
       ),
       true,
     );
     expect(
       filter.matchesCommit(
-        CommitStatus(commit: generateCommitForTest(sha: '0x45c3fd'), tasks: []),
+        CommitStatus(
+          commit: generateCommitForTest(sha: '0x45c3fd'),
+          tasks: [],
+        ),
       ),
       true,
     );
@@ -719,7 +725,10 @@
     for (final filter in filters) {
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(author: 'foo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(author: 'foo'),
+            tasks: [],
+          ),
         ),
         true,
       );
@@ -734,7 +743,10 @@
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(author: 'fo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(author: 'fo'),
+            tasks: [],
+          ),
         ),
         false,
       );
@@ -777,7 +789,10 @@
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(author: 'foo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(author: 'foo'),
+            tasks: [],
+          ),
         ),
         false,
       );
@@ -811,7 +826,10 @@
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(message: 'fo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(message: 'fo'),
+            tasks: [],
+          ),
         ),
         false,
       );
@@ -873,7 +891,10 @@
     for (final filter in filters) {
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(sha: 'foo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(sha: 'foo'),
+            tasks: [],
+          ),
         ),
         true,
       );
@@ -888,7 +909,10 @@
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(sha: 'fo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(sha: 'fo'),
+            tasks: [],
+          ),
         ),
         false,
       );
@@ -904,25 +928,37 @@
     for (final filter in filters) {
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(sha: 'z bc'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(sha: 'z bc'),
+            tasks: [],
+          ),
         ),
         true,
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(sha: 'z bc z'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(sha: 'z bc z'),
+            tasks: [],
+          ),
         ),
         false,
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(sha: 'z b c'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(sha: 'z b c'),
+            tasks: [],
+          ),
         ),
         false,
       );
       expect(
         filter.matchesCommit(
-          CommitStatus(commit: generateCommitForTest(sha: 'foo'), tasks: []),
+          CommitStatus(
+            commit: generateCommitForTest(sha: 'foo'),
+            tasks: [],
+          ),
         ),
         false,
       );
diff --git a/dashboard/test/service/appengine_cocoon_test.dart b/dashboard/test/service/appengine_cocoon_test.dart
index 9395e00..849fd94 100644
--- a/dashboard/test/service/appengine_cocoon_test.dart
+++ b/dashboard/test/service/appengine_cocoon_test.dart
@@ -417,13 +417,9 @@
 
     /// This test requires runs on different platforms.
     test('should query correct endpoint whether web or mobile', () {
-      final uri =
-          service
-              .apiEndpoint(
-                '/test',
-                queryParameters: <String, String?>{'key': null},
-              )
-              .toString();
+      final uri = service
+          .apiEndpoint('/test', queryParameters: <String, String?>{'key': null})
+          .toString();
       if (kIsWeb) {
         expect(uri, '/test?key');
       } else {
diff --git a/dashboard/test/utils/task_icons.dart b/dashboard/test/utils/task_icons.dart
index be0bf47..0d5ce13 100644
--- a/dashboard/test/utils/task_icons.dart
+++ b/dashboard/test/utils/task_icons.dart
@@ -19,11 +19,10 @@
   }
 
   final assetPath = path.joinAll(<String>[...pathParts, 'assets']);
-  final assets =
-      Directory(assetPath)
-          .listSync()
-          .map((FileSystemEntity entity) => path.basename(entity.path))
-          .toList();
+  final assets = Directory(assetPath)
+      .listSync()
+      .map((FileSystemEntity entity) => path.basename(entity.path))
+      .toList();
   await tester.pumpWidget(const SizedBox());
   await tester.runAsync(() async {
     for (final asset in assets) {
diff --git a/dashboard/test/widgets/accessibility_test.dart b/dashboard/test/widgets/accessibility_test.dart
index f9e2035..26f8067 100644
--- a/dashboard/test/widgets/accessibility_test.dart
+++ b/dashboard/test/widgets/accessibility_test.dart
@@ -25,14 +25,12 @@
     const longNames = <String>['Michael', 'Thomas', 'Peter', 'Volkert'];
 
     Widget buildAuthors({required List<String> names, ThemeData? theme}) {
-      final List<Widget> avatars =
-          names
-              .map(
-                (String name) => CommitAuthorAvatar(
-                  commit: generateCommitForTest(author: name),
-                ),
-              )
-              .toList();
+      final List<Widget> avatars = names
+          .map(
+            (String name) =>
+                CommitAuthorAvatar(commit: generateCommitForTest(author: name)),
+          )
+          .toList();
 
       return MaterialApp(
         theme: theme ?? ThemeData.light(),
diff --git a/dashboard/test/widgets/commit_author_avatar_test.dart b/dashboard/test/widgets/commit_author_avatar_test.dart
index 5a35e4d..f5eac74 100644
--- a/dashboard/test/widgets/commit_author_avatar_test.dart
+++ b/dashboard/test/widgets/commit_author_avatar_test.dart
@@ -27,8 +27,9 @@
     );
 
     expect(find.text('M'), findsNWidgets(2));
-    final avatars =
-        tester.widgetList<CircleAvatar>(find.byType(CircleAvatar)).toList();
+    final avatars = tester
+        .widgetList<CircleAvatar>(find.byType(CircleAvatar))
+        .toList();
     expect(avatars, hasLength(2));
     expect(avatars.first.backgroundColor, isNot(avatars.last.backgroundColor));
   });
diff --git a/dashboard/test/widgets/task_overlay_test.dart b/dashboard/test/widgets/task_overlay_test.dart
index 266bdf0..d0d3b81 100644
--- a/dashboard/test/widgets/task_overlay_test.dart
+++ b/dashboard/test/widgets/task_overlay_test.dart
@@ -443,10 +443,9 @@
     await tester.tapAt(const Offset(_cellSize * 1.5, _cellSize * 1.5));
     await tester.pump();
 
-    final rerun =
-        tester
-            .element(find.text('RERUN'))
-            .findAncestorWidgetOfExactType<ProgressButton>();
+    final rerun = tester
+        .element(find.text('RERUN'))
+        .findAncestorWidgetOfExactType<ProgressButton>();
 
     expect(rerun, isNotNull, reason: 'The rerun button should exist.');
     expect(
diff --git a/dev/cocoon_code_health/bin/check.dart b/dev/cocoon_code_health/bin/check.dart
index 7bc1c26..2998ccf 100644
--- a/dev/cocoon_code_health/bin/check.dart
+++ b/dev/cocoon_code_health/bin/check.dart
@@ -13,15 +13,14 @@
 import 'package:file/local.dart';
 import 'package:path/path.dart' as p;
 
-final _parser =
-    ArgParser(allowTrailingOptions: false)
-      ..addOption(
-        'repository-root',
-        help: 'The root of the flutter/cocoon repository.',
-        defaultsTo: _findRepositoryRoot(),
-      )
-      ..addFlag('quiet', abbr: 'q', help: 'Quiet output')
-      ..addFlag('verbose', abbr: 'v', help: 'Show additional output');
+final _parser = ArgParser(allowTrailingOptions: false)
+  ..addOption(
+    'repository-root',
+    help: 'The root of the flutter/cocoon repository.',
+    defaultsTo: _findRepositoryRoot(),
+  )
+  ..addFlag('quiet', abbr: 'q', help: 'Quiet output')
+  ..addFlag('verbose', abbr: 'v', help: 'Show additional output');
 
 const _anyPackageChecks = [DoNotSubmitFixme(), NoTrailingWhitespace()];
 const _serverPackageChecks = [..._anyPackageChecks, UseTestLogging()];
diff --git a/dev/cocoon_code_health/pubspec.yaml b/dev/cocoon_code_health/pubspec.yaml
index e535c5c..3264fad 100644
--- a/dev/cocoon_code_health/pubspec.yaml
+++ b/dev/cocoon_code_health/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 resolution: workspace
 
diff --git a/dev/githubanalysis/lib/issue.dart b/dev/githubanalysis/lib/issue.dart
index 0bf5dc2..1341b74 100644
--- a/dev/githubanalysis/lib/issue.dart
+++ b/dev/githubanalysis/lib/issue.dart
@@ -24,10 +24,9 @@
     this.redirect,
     this.isDeleted = false,
   }) {
-    _labels =
-        _metadata?.labels
-            .map<String>((final IssueLabel label) => label.name)
-            .toSet();
+    _labels = _metadata?.labels
+        .map<String>((final IssueLabel label) => label.name)
+        .toSet();
     if (_labels != null) {
       final matches = priorities.toSet().intersection(_labels);
       if (matches.length > 1) {
@@ -89,12 +88,12 @@
           } else if (issue.url == '') {
             return json.encode(<String, Object?>{'deleted': true});
           }
-          final comments =
-              await github.issues
-                  .listCommentsByIssue(repo, issueNumber)
-                  .toList();
-          final reactions =
-              await github.issues.listReactions(repo, issueNumber).toList();
+          final comments = await github.issues
+              .listCommentsByIssue(repo, issueNumber)
+              .toList();
+          final reactions = await github.issues
+              .listReactions(repo, issueNumber)
+              .toList();
           return json.encode(<String, Object?>{
             'issue': issue,
             'comments': comments,
@@ -262,15 +261,9 @@
       invalid += 1;
     } on NotFound {
       if (index > lastIssueNumber) {
-        final lastIssue =
-            await github.issues
-                .listByRepo(
-                  repo,
-                  state: 'all',
-                  sort: 'created',
-                  direction: 'desc',
-                )
-                .first;
+        final lastIssue = await github.issues
+            .listByRepo(repo, state: 'all', sort: 'created', direction: 'desc')
+            .first;
         lastIssueNumber = lastIssue.number;
         maxKnown = true;
         if (index > lastIssueNumber) {
@@ -297,8 +290,9 @@
   final Map<int, FullIssue> issues,
 ) async {
   final pendingIssues = issues.isEmpty ? <int>{} : issues.keys.toSet();
-  var highestKnownIssue =
-      pendingIssues.isEmpty ? 0 : (pendingIssues.toList()..sort()).last;
+  var highestKnownIssue = pendingIssues.isEmpty
+      ? 0
+      : (pendingIssues.toList()..sort()).last;
   final updateStampFile = cacheFileFor(cache, <String>[
     'issue',
     repo.owner,
diff --git a/dev/githubanalysis/lib/main.dart b/dev/githubanalysis/lib/main.dart
index add5a39..b1feb88 100644
--- a/dev/githubanalysis/lib/main.dart
+++ b/dev/githubanalysis/lib/main.dart
@@ -81,19 +81,17 @@
     );
     final allMembers = <String>{};
     final currentMembers = roster.teams[primaryTeam]!.keys.map(canon).toSet();
-    final expectedMembers =
-        (await membersFile.readAsString())
-            .trimRight()
-            .split('\n')
-            .where((final String name) => !name.endsWith(' (DO NOT ADD)'))
-            .map(canon)
-            .toSet();
-    final expectedExmembers =
-        (await exmembersFile.readAsString())
-            .trimRight()
-            .split('\n')
-            .map(canon)
-            .toSet();
+    final expectedMembers = (await membersFile.readAsString())
+        .trimRight()
+        .split('\n')
+        .where((final String name) => !name.endsWith(' (DO NOT ADD)'))
+        .map(canon)
+        .toSet();
+    final expectedExmembers = (await exmembersFile.readAsString())
+        .trimRight()
+        .split('\n')
+        .map(canon)
+        .toSet();
     try {
       final unexpectedMembers = currentMembers.difference(expectedMembers);
       final memberExmembers = expectedExmembers.intersection(currentMembers);
@@ -192,11 +190,10 @@
 
     roster.teams[primaryTeam]!.values.forEach(forUser);
 
-    final allIssues =
-        issues.values
-            .expand((final Map<int, FullIssue> issues) => issues.values)
-            .where((final FullIssue issue) => issue.isValid)
-            .toList();
+    final allIssues = issues.values
+        .expand((final Map<int, FullIssue> issues) => issues.values)
+        .where((final FullIssue issue) => issue.isValid)
+        .toList();
     for (final issue in allIssues) {
       if (issue.isPullRequest) {
         // Pull requests filed.
@@ -295,14 +292,12 @@
       priorityAnalysis[priority] = PriorityResults();
     }
 
-    final primaryIssues =
-        issues[issueDatabaseRepo.fullName]!.values
-            .where((final issue) => issue.isValid && !issue.isPullRequest)
-            .toList();
-    final primaryPRs =
-        issues[issueDatabaseRepo.fullName]!.values
-            .where((final issue) => issue.isValid && issue.isPullRequest)
-            .toList();
+    final primaryIssues = issues[issueDatabaseRepo.fullName]!.values
+        .where((final issue) => issue.isValid && !issue.isPullRequest)
+        .toList();
+    final primaryPRs = issues[issueDatabaseRepo.fullName]!.values
+        .where((final issue) => issue.isValid && issue.isPullRequest)
+        .toList();
     for (final issue in primaryIssues.where(
       (final issue) => issue.priority != null,
     )) {
@@ -419,10 +414,9 @@
         if (reaction.content == '+1') {
           count += 1;
           if (count >= 20) {
-            daysToTwentyVotes =
-                reaction.createdAt!
-                    .difference(issue.metadata.createdAt!)
-                    .inDays;
+            daysToTwentyVotes = reaction.createdAt!
+                .difference(issue.metadata.createdAt!)
+                .inDays;
             break;
           }
         }
@@ -465,8 +459,9 @@
       for (final String priority in priorities) priority: 0,
     };
     for (final issue in primaryIssues.where(issueIsClosed)) {
-      final timeOpen =
-          issue.metadata.closedAt!.difference(issue.metadata.createdAt!).inDays;
+      final timeOpen = issue.metadata.closedAt!
+          .difference(issue.metadata.createdAt!)
+          .inDays;
       final priority = issue.priority;
       closureTimeHistogramClosed
           .putIfAbsent(timeOpen, () => <String?, int>{})
@@ -540,12 +535,11 @@
     for (final issue in primaryIssues) {
       final priority = issue.priority;
       closureTimeTotalsAll[priority] = closureTimeTotalsAll[priority]! + 1;
-      final timeOpen =
-          issueIsClosed(issue)
-              ? issue.metadata.closedAt!
-                  .difference(issue.metadata.createdAt!)
-                  .inDays
-              : maxDaysToClose + 1;
+      final timeOpen = issueIsClosed(issue)
+          ? issue.metadata.closedAt!
+                .difference(issue.metadata.createdAt!)
+                .inDays
+          : maxDaysToClose + 1;
       closureTimeHistogramAll
           .putIfAbsent(timeOpen, () => <String?, int>{})
           .update(priority, (final int value) => value + 1, ifAbsent: () => 1);
@@ -689,8 +683,9 @@
         } else {
           forWeek(issue.metadata.createdAt)!.issues += 1;
           forWeek(issue.metadata.createdAt)!.priorityCount[issue.priority] =
-              forWeek(issue.metadata.createdAt)!.priorityCount[issue
-                  .priority]! +
+              forWeek(
+                issue.metadata.createdAt,
+              )!.priorityCount[issue.priority]! +
               1;
           if (issueIsOpen(issue)) {
             forWeek(issue.metadata.createdAt)!.remainingIssues += 1;
@@ -742,10 +737,9 @@
     final now = DateTime.now();
     for (final issue in primaryIssues) {
       for (final label in issue.metadata.labels) {
-        final data =
-            labels.putIfAbsent(label.name, () => LabelData(label.name))
-              ..all += 1
-              ..issues += 1;
+        final data = labels.putIfAbsent(label.name, () => LabelData(label.name))
+          ..all += 1
+          ..issues += 1;
         if (issueIsOpen(issue)) {
           data.open += 1;
         }
@@ -764,10 +758,9 @@
     }
     for (final issue in primaryPRs) {
       for (final label in issue.metadata.labels) {
-        final data =
-            labels.putIfAbsent(label.name, () => LabelData(label.name))
-              ..all += 1
-              ..prs += 1;
+        final data = labels.putIfAbsent(label.name, () => LabelData(label.name))
+          ..all += 1
+          ..prs += 1;
         if (now.difference(issue.metadata.updatedAt!) <
             const Duration(days: 52 * 7)) {
           data.prsUpdated52 += 1;
@@ -871,18 +864,14 @@
       closures.length +
       pullRequests.length +
       reactions.length;
-  double get density =>
-      (earliest == null || latest == null)
-          ? double.nan
-          : total /
-              (latest!.millisecondsSinceEpoch -
-                  earliest!.millisecondsSinceEpoch);
-  double get daysActive =>
-      (earliest == null || latest == null)
-          ? double.nan
-          : (latest!.millisecondsSinceEpoch -
-                  earliest!.millisecondsSinceEpoch) /
-              Duration.millisecondsPerDay;
+  double get density => (earliest == null || latest == null)
+      ? double.nan
+      : total /
+            (latest!.millisecondsSinceEpoch - earliest!.millisecondsSinceEpoch);
+  double get daysActive => (earliest == null || latest == null)
+      ? double.nan
+      : (latest!.millisecondsSinceEpoch - earliest!.millisecondsSinceEpoch) /
+            Duration.millisecondsPerDay;
 }
 
 class PriorityResults {
@@ -973,8 +962,9 @@
       );
       for (final reaction in issue.reactions) {
         if (reaction.content == '+1') {
-          final day =
-              reaction.createdAt!.difference(issue.metadata.createdAt!).inDays;
+          final day = reaction.createdAt!
+              .difference(issue.metadata.createdAt!)
+              .inDays;
           thumbs[day] = thumbs[day] + 1;
         }
       }
diff --git a/dev/githubanalysis/lib/team.dart b/dev/githubanalysis/lib/team.dart
index 1690d76..6f36549 100644
--- a/dev/githubanalysis/lib/team.dart
+++ b/dev/githubanalysis/lib/team.dart
@@ -62,8 +62,8 @@
         cacheEpoch,
         () async {
           final cacheData = StringBuffer();
-          await for (final TeamMember member in github.organizations
-              .listTeamMembers(teamId)) {
+          await for (final TeamMember member
+              in github.organizations.listTeamMembers(teamId)) {
             verifyStringSanity(member.login!, const <String>{'\n', ' '});
             verifyStringSanity(member.htmlUrl!, const <String>{'\n', ' '});
             verifyStringSanity(member.avatarUrl!, const <String>{'\n', ' '});
diff --git a/dev/githubanalysis/pubspec.yaml b/dev/githubanalysis/pubspec.yaml
index f0848c2..770d497 100644
--- a/dev/githubanalysis/pubspec.yaml
+++ b/dev/githubanalysis/pubspec.yaml
@@ -1,7 +1,7 @@
 name: githubanalysis
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   github: ^9.9.0
diff --git a/licenses/pubspec.yaml b/licenses/pubspec.yaml
index 26b6318..d986536 100644
--- a/licenses/pubspec.yaml
+++ b/licenses/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Script to check licenses.
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   path: 1.9.1
diff --git a/packages/buildbucket-dart/pubspec.yaml b/packages/buildbucket-dart/pubspec.yaml
index 67e6f2a..c3b26a4 100644
--- a/packages/buildbucket-dart/pubspec.yaml
+++ b/packages/buildbucket-dart/pubspec.yaml
@@ -5,7 +5,7 @@
 resolution: workspace
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   protoc_plugin: 21.1.2
diff --git a/packages/cocoon_common/pubspec.yaml b/packages/cocoon_common/pubspec.yaml
index 0b6cec8..04ee714 100644
--- a/packages/cocoon_common/pubspec.yaml
+++ b/packages/cocoon_common/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 resolution: workspace
 
diff --git a/packages/cocoon_common/test/task_status_test.dart b/packages/cocoon_common/test/task_status_test.dart
index 473bcd1..bf1abec 100644
--- a/packages/cocoon_common/test/task_status_test.dart
+++ b/packages/cocoon_common/test/task_status_test.dart
@@ -31,15 +31,14 @@
   });
 
   group('.value', () {
-    for (final MapEntry(key: value, value: expectation)
-        in {
-          TaskStatus.cancelled: 'Cancelled',
-          TaskStatus.waitingForBackfill: 'New',
-          TaskStatus.infraFailure: 'Infra Failure',
-          TaskStatus.failed: 'Failed',
-          TaskStatus.succeeded: 'Succeeded',
-          TaskStatus.skipped: 'Skipped',
-        }.entries) {
+    for (final MapEntry(key: value, value: expectation) in {
+      TaskStatus.cancelled: 'Cancelled',
+      TaskStatus.waitingForBackfill: 'New',
+      TaskStatus.infraFailure: 'Infra Failure',
+      TaskStatus.failed: 'Failed',
+      TaskStatus.succeeded: 'Succeeded',
+      TaskStatus.skipped: 'Skipped',
+    }.entries) {
       test('$value == $expectation', () {
         expect(value.value, expectation);
       });
diff --git a/packages/cocoon_common_test/pubspec.yaml b/packages/cocoon_common_test/pubspec.yaml
index c1a8bae..42e4ce1 100644
--- a/packages/cocoon_common_test/pubspec.yaml
+++ b/packages/cocoon_common_test/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 resolution: workspace
 
diff --git a/packages/cocoon_server/lib/big_query_pull_request_record.g.dart b/packages/cocoon_server/lib/big_query_pull_request_record.g.dart
index 0b03716..4f70123 100644
--- a/packages/cocoon_server/lib/big_query_pull_request_record.g.dart
+++ b/packages/cocoon_server/lib/big_query_pull_request_record.g.dart
@@ -10,14 +10,12 @@
 
 PullRequestRecord _$PullRequestRecordFromJson(Map<String, dynamic> json) =>
     PullRequestRecord(
-      prCreatedTimestamp:
-          json['pr_created_timestamp'] == null
-              ? null
-              : DateTime.parse(json['pr_created_timestamp'] as String),
-      prLandedTimestamp:
-          json['pr_landed_timestamp'] == null
-              ? null
-              : DateTime.parse(json['pr_landed_timestamp'] as String),
+      prCreatedTimestamp: json['pr_created_timestamp'] == null
+          ? null
+          : DateTime.parse(json['pr_created_timestamp'] as String),
+      prLandedTimestamp: json['pr_landed_timestamp'] == null
+          ? null
+          : DateTime.parse(json['pr_landed_timestamp'] as String),
       organization: json['organization'] as String?,
       repository: json['repository'] as String?,
       author: json['author'] as String?,
diff --git a/packages/cocoon_server/pubspec.yaml b/packages/cocoon_server/pubspec.yaml
index 2c8e618..9efa45b 100644
--- a/packages/cocoon_server/pubspec.yaml
+++ b/packages/cocoon_server/pubspec.yaml
@@ -5,7 +5,7 @@
 resolution: workspace
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 # Version constraints in this package are intentionally relaxed, because the
 # exact versions are locked by app_dart and auto_submit apps.
diff --git a/packages/cocoon_server_test/pubspec.yaml b/packages/cocoon_server_test/pubspec.yaml
index 4ec1c4b..664f8ab 100644
--- a/packages/cocoon_server_test/pubspec.yaml
+++ b/packages/cocoon_server_test/pubspec.yaml
@@ -5,7 +5,7 @@
 resolution: workspace
 
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 dependencies:
   cocoon_common:
diff --git a/pubspec.yaml b/pubspec.yaml
index 6c1314b..7514b56 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -6,7 +6,7 @@
 
 # Required for workspace support.
 environment:
-  sdk: ^3.7.0
+  sdk: ^3.9.0
 
 workspace:
   - packages/buildbucket-dart
