[flutter_tool,fuchsia] Prefetch tiles when starting an app (#34276)

diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index db36649..2cb003e 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -252,6 +252,18 @@
     FuchsiaPackageServer fuchsiaPackageServer;
     bool serverRegistered = false;
     try {
+      // Ask amber to pre-fetch some things we'll need before setting up our own
+      // package server. This is to avoid relying on amber correctly using
+      // multiple package servers, support for which is in flux.
+      if (!await fuchsiaDeviceTools.amberCtl.getUp(this, 'tiles')) {
+        printError('Failed to get amber to prefetch tiles');
+        return LaunchResult.failed();
+      }
+      if (!await fuchsiaDeviceTools.amberCtl.getUp(this, 'tiles_ctl')) {
+        printError('Failed to get amber to prefetch tiles_ctl');
+        return LaunchResult.failed();
+      }
+
       // Start up a package server.
       fuchsiaPackageServer = FuchsiaPackageServer(packageRepo.path, host, port);
       if (!await fuchsiaPackageServer.start()) {
@@ -297,7 +309,7 @@
         await fuchsiaDeviceTools.amberCtl.rmSrc(this, fuchsiaPackageServer);
       }
       // Shutdown the package server and delete the package repo;
-      fuchsiaPackageServer.stop();
+      fuchsiaPackageServer?.stop();
       packageRepo.deleteSync(recursive: true);
       status.cancel();
     }