diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md
index a18f8f2..6a1853e 100644
--- a/packages/pigeon/CHANGELOG.md
+++ b/packages/pigeon/CHANGELOG.md
@@ -1,13 +1,19 @@
+## 8.0.0
+
+* [objc] **BREAKING CHANGE**: FlutterApi calls now return a `FlutterError`,
+  rather than an `NSError`, on failure.
+* [objc] Fixes an unused function warning when only generating FlutterApi.
+
 ## 7.2.1
 
 * [kotlin] Fixes Flutter api int errors with updated casting.
 
 ## 7.2.0
 
-* [swift] Changes async method completion types. 
+* [swift] Changes async method completion types.
   May require code updates to existing code.
 * [swift] Adds error handling to async methods.
-* [kotlin] Changes async method completion types. 
+* [kotlin] Changes async method completion types.
   May require code updates to existing code.
 * [kotlin] Adds error handling to async methods.
 * Adds async error handling integration tests for all platforms.
diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart
index 7b87c23..07277d2 100644
--- a/packages/pigeon/lib/generator_tools.dart
+++ b/packages/pigeon/lib/generator_tools.dart
@@ -11,7 +11,7 @@
 /// The current version of pigeon.
 ///
 /// This must match the version in pubspec.yaml.
-const String pigeonVersion = '7.2.1';
+const String pigeonVersion = '8.0.0';
 
 /// Read all the content from [stdin] to a String.
 String readStdin() {
diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart
index b9a3695..926d4ec 100644
--- a/packages/pigeon/lib/objc_generator.dart
+++ b/packages/pigeon/lib/objc_generator.dart
@@ -361,7 +361,9 @@
   @override
   void writeDataClasses(
       ObjcOptions generatorOptions, Root root, Indent indent) {
-    _writeObjcSourceHelperFunctions(indent);
+    _writeObjcSourceHelperFunctions(indent,
+        hasHostApiMethods: root.apis.any((Api api) =>
+            api.location == ApiLocation.host && api.methods.isNotEmpty));
 
     for (final Class klass in root.classes) {
       _writeObjcSourceDataClassExtension(generatorOptions, indent, klass);
@@ -643,8 +645,10 @@
     });
   }
 
-  void _writeObjcSourceHelperFunctions(Indent indent) {
-    indent.format('''
+  void _writeObjcSourceHelperFunctions(Indent indent,
+      {required bool hasHostApiMethods}) {
+    if (hasHostApiMethods) {
+      indent.format('''
 static NSArray *wrapResult(id result, FlutterError *error) {
 \tif (error) {
 \t\treturn @[
@@ -653,6 +657,7 @@
 \t}
 \treturn @[ result ?: [NSNull null] ];
 }''');
+    }
     indent.format('''
 static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) {
 \tid result = array[key];
@@ -795,6 +800,55 @@
       indent.writeln('return sSharedObject;');
     });
   }
+
+  void _writeMethod(ObjcOptions languageOptions, Root root, Indent indent,
+      Api api, Method func) {
+    final _ObjcPtr returnType =
+        _objcTypeForDartType(languageOptions.prefix, func.returnType);
+    final String callbackType = _callbackForType(func.returnType, returnType);
+
+    String argNameFunc(int count, NamedType arg) => _getSafeArgName(count, arg);
+    final Iterable<String> argNames = indexMap(func.arguments, argNameFunc);
+    String sendArgument;
+    if (func.arguments.isEmpty) {
+      sendArgument = 'nil';
+    } else {
+      String makeVarOrNSNullExpression(String x) => '$x ?: [NSNull null]';
+      sendArgument = '@[${argNames.map(makeVarOrNSNullExpression).join(', ')}]';
+    }
+    indent.write(_makeObjcSignature(
+      func: func,
+      options: languageOptions,
+      returnType: 'void',
+      lastArgName: 'completion',
+      lastArgType: callbackType,
+      argNameFunc: argNameFunc,
+      isEnum: (TypeDeclaration t) => isEnum(root, t),
+    ));
+    indent.addScoped(' {', '}', () {
+      indent.writeln('FlutterBasicMessageChannel *channel =');
+      indent.nest(1, () {
+        indent.writeln('[FlutterBasicMessageChannel');
+        indent.nest(1, () {
+          indent.writeln(
+              'messageChannelWithName:@"${makeChannelName(api, func)}"');
+          indent.writeln('binaryMessenger:self.binaryMessenger');
+          indent.write(
+              'codec:${_getCodecGetterName(languageOptions.prefix, api.name)}()');
+          indent.addln('];');
+        });
+      });
+      indent.write('[channel sendMessage:$sendArgument reply:^(id reply) ');
+      indent.addScoped('{', '}];', () {
+        if (func.returnType.isVoid) {
+          indent.writeln('completion(nil);');
+        } else {
+          indent.writeln('${returnType.ptr}output = reply;');
+          indent.writeln('completion(output, nil);');
+        }
+      });
+    });
+  }
 }
 
 /// Writes the method declaration for the initializer.
@@ -842,8 +896,8 @@
 /// Calculates callback block signature for for async methods.
 String _callbackForType(TypeDeclaration type, _ObjcPtr objcType) {
   return type.isVoid
-      ? 'void (^)(NSError *_Nullable)'
-      : 'void (^)(${objcType.ptr.trim()}_Nullable, NSError *_Nullable)';
+      ? 'void (^)(FlutterError *_Nullable)'
+      : 'void (^)(${objcType.ptr.trim()}_Nullable, FlutterError *_Nullable)';
 }
 
 /// Represents an ObjC pointer (ex 'id', 'NSString *').
@@ -1069,55 +1123,6 @@
   });
 }
 
-void _writeMethod(ObjcOptions languageOptions, Root root, Indent indent,
-    Api api, Method func) {
-  final _ObjcPtr returnType =
-      _objcTypeForDartType(languageOptions.prefix, func.returnType);
-  final String callbackType = _callbackForType(func.returnType, returnType);
-
-  String argNameFunc(int count, NamedType arg) => _getSafeArgName(count, arg);
-  final Iterable<String> argNames = indexMap(func.arguments, argNameFunc);
-  String sendArgument;
-  if (func.arguments.isEmpty) {
-    sendArgument = 'nil';
-  } else {
-    String makeVarOrNSNullExpression(String x) => '$x ?: [NSNull null]';
-    sendArgument = '@[${argNames.map(makeVarOrNSNullExpression).join(', ')}]';
-  }
-  indent.write(_makeObjcSignature(
-    func: func,
-    options: languageOptions,
-    returnType: 'void',
-    lastArgName: 'completion',
-    lastArgType: callbackType,
-    argNameFunc: argNameFunc,
-    isEnum: (TypeDeclaration t) => isEnum(root, t),
-  ));
-  indent.addScoped(' {', '}', () {
-    indent.writeln('FlutterBasicMessageChannel *channel =');
-    indent.nest(1, () {
-      indent.writeln('[FlutterBasicMessageChannel');
-      indent.nest(1, () {
-        indent
-            .writeln('messageChannelWithName:@"${makeChannelName(api, func)}"');
-        indent.writeln('binaryMessenger:self.binaryMessenger');
-        indent.write(
-            'codec:${_getCodecGetterName(languageOptions.prefix, api.name)}()');
-        indent.addln('];');
-      });
-    });
-    indent.write('[channel sendMessage:$sendArgument reply:^(id reply) ');
-    indent.addScoped('{', '}];', () {
-      if (func.returnType.isVoid) {
-        indent.writeln('completion(nil);');
-      } else {
-        indent.writeln('${returnType.ptr}output = reply;');
-        indent.writeln('completion(output, nil);');
-      }
-    });
-  });
-}
-
 /// Looks through the AST for features that aren't supported by the ObjC
 /// generator.
 List<Error> validateObjc(ObjcOptions options, Root root) {
diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart
index 2b9a33c..2de8cd5 100644
--- a/packages/pigeon/mock_handler_tester/test/message.dart
+++ b/packages/pigeon/mock_handler_tester/test/message.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart
index bee1f45..bdd87c3 100644
--- a/packages/pigeon/mock_handler_tester/test/test.dart
+++ b/packages/pigeon/mock_handler_tester/test/test.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import
 // ignore_for_file: avoid_relative_lib_imports
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
index c43837c..f1194d8 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package com.example.alternate_language_test_plugin;
@@ -196,7 +196,6 @@
     private AllTypes() {}
 
     public static final class Builder {
-
       private @Nullable Boolean aBool;
 
       public @NonNull Builder setABool(@NonNull Boolean setterArg) {
@@ -480,7 +479,6 @@
     }
 
     public static final class Builder {
-
       private @Nullable Boolean aNullableBool;
 
       public @NonNull Builder setANullableBool(@Nullable Boolean setterArg) {
@@ -677,7 +675,6 @@
     private AllNullableTypesWrapper() {}
 
     public static final class Builder {
-
       private @Nullable AllNullableTypes values;
 
       public @NonNull Builder setValues(@NonNull AllNullableTypes setterArg) {
@@ -3338,7 +3335,6 @@
    * <p>Generated interface from Pigeon that represents a handler of messages from Flutter.
    */
   public interface HostTrivialApi {
-
     void noop();
 
     /** The codec used by HostTrivialApi. */
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj
index 0ed178f..ec7df03 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/Runner.xcodeproj/project.pbxproj
@@ -326,6 +326,7 @@
 			files = (
 			);
 			inputPaths = (
+				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
 			);
 			name = "Thin Binary";
 			outputPaths = (
@@ -530,6 +531,7 @@
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CURRENT_PROJECT_VERSION = 1;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
 				GENERATE_INFOPLIST_FILE = YES;
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
@@ -544,6 +546,7 @@
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CURRENT_PROJECT_VERSION = 1;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
 				GENERATE_INFOPLIST_FILE = YES;
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
@@ -558,6 +561,7 @@
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CURRENT_PROJECT_VERSION = 1;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
 				GENERATE_INFOPLIST_FILE = YES;
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m
index 623a373..4ac3d8a 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AllDatatypesTest.m
@@ -24,7 +24,7 @@
       [[FlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   [api echoAllNullableTypes:everything
-                 completion:^(AllNullableTypes *_Nonnull result, NSError *_Nullable error) {
+                 completion:^(AllNullableTypes *_Nonnull result, FlutterError *_Nullable error) {
                    XCTAssertNil(result.aNullableBool);
                    XCTAssertNil(result.aNullableInt);
                    XCTAssertNil(result.aNullableDouble);
@@ -63,7 +63,7 @@
       [[FlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   [api echoAllNullableTypes:everything
-                 completion:^(AllNullableTypes *_Nonnull result, NSError *_Nullable error) {
+                 completion:^(AllNullableTypes *_Nonnull result, FlutterError *_Nullable error) {
                    XCTAssertEqual(result.aNullableBool, everything.aNullableBool);
                    XCTAssertEqual(result.aNullableInt, everything.aNullableInt);
                    XCTAssertEqual(result.aNullableDouble, everything.aNullableDouble);
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AsyncHandlersTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AsyncHandlersTest.m
index d8a2033..e72da1d 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AsyncHandlersTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/AsyncHandlersTest.m
@@ -57,7 +57,7 @@
   input.number = @(1);
   XCTestExpectation *expectation = [self expectationWithDescription:@"calculate callback"];
   [api2Flutter calculateValue:input
-                   completion:^(Value *_Nonnull output, NSError *_Nullable error) {
+                   completion:^(Value *_Nonnull output, FlutterError *_Nullable error) {
                      XCTAssertEqual(output.number.intValue, 2);
                      [expectation fulfill];
                    }];
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EchoMessenger.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EchoMessenger.m
index cd86bfd..b7b3342 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EchoMessenger.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EchoMessenger.m
@@ -20,7 +20,7 @@
   return self;
 }
 
-- (void)cleanupConnection:(FlutterBinaryMessengerConnection)connection {
+- (void)cleanUpConnection:(FlutterBinaryMessengerConnection)connection {
 }
 
 - (void)sendOnChannel:(nonnull NSString *)channel message:(NSData *_Nullable)message {
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EnumTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EnumTest.m
index 54d3d27..99ff3eb 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EnumTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/EnumTest.m
@@ -24,7 +24,7 @@
   EnumApi2Flutter *api = [[EnumApi2Flutter alloc] initWithBinaryMessenger:binaryMessenger];
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   [api echoData:data
-      completion:^(DataWithEnum *_Nonnull result, NSError *_Nullable error) {
+      completion:^(DataWithEnum *_Nonnull result, FlutterError *_Nullable error) {
         XCTAssertEqual(data.state, result.state);
         [expectation fulfill];
       }];
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/HandlerBinaryMessenger.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/HandlerBinaryMessenger.m
index e593333..05c38f8 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/HandlerBinaryMessenger.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/HandlerBinaryMessenger.m
@@ -23,7 +23,7 @@
   return self;
 }
 
-- (void)cleanupConnection:(FlutterBinaryMessengerConnection)connection {
+- (void)cleanUpConnection:(FlutterBinaryMessengerConnection)connection {
 }
 
 - (void)sendOnChannel:(nonnull NSString *)channel message:(NSData *_Nullable)message {
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/ListTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/ListTest.m
index 70c2842..479a80f 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/ListTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/ListTest.m
@@ -26,7 +26,7 @@
   EchoApi *api = [[EchoApi alloc] initWithBinaryMessenger:binaryMessenger];
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   [api echoMsg:top
-      completion:^(TestMessage *_Nonnull result, NSError *_Nullable err) {
+      completion:^(TestMessage *_Nonnull result, FlutterError *_Nullable err) {
         XCTAssertEqual(1u, result.testList.count);
         XCTAssertTrue([result.testList[0] isKindOfClass:[TestMessage class]]);
         XCTAssertEqualObjects(inside.testList, [result.testList[0] testList]);
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/MultipleArityTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/MultipleArityTest.m
index fe6ce3f..3bef858 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/MultipleArityTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/MultipleArityTest.m
@@ -27,7 +27,7 @@
   XCTestExpectation *expectation = [self expectationWithDescription:@"subtraction"];
   [api subtractX:@(30)
                y:@(10)
-      completion:^(NSNumber *_Nonnull result, NSError *_Nullable error) {
+      completion:^(NSNumber *_Nonnull result, FlutterError *_Nullable error) {
         XCTAssertNil(error);
         XCTAssertEqual(20, result.intValue);
         [expectation fulfill];
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NullableReturnsTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NullableReturnsTest.m
index 71baf86..d09be4c 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NullableReturnsTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/NullableReturnsTest.m
@@ -40,7 +40,7 @@
       [[NullableArgFlutterApi alloc] initWithBinaryMessenger:binaryMessenger];
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   [api doitX:nil
-      completion:^(NSNumber *_Nonnull result, NSError *_Nullable error) {
+      completion:^(NSNumber *_Nonnull result, FlutterError *_Nullable error) {
         XCTAssertNil(result);
         [expectation fulfill];
       }];
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/PrimitiveTest.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/PrimitiveTest.m
index 5b554a7..19a4835 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/PrimitiveTest.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/ios/RunnerTests/PrimitiveTest.m
@@ -22,7 +22,7 @@
   PrimitiveFlutterApi *api = [[PrimitiveFlutterApi alloc] initWithBinaryMessenger:binaryMessenger];
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   [api anIntValue:@1
-       completion:^(NSNumber *_Nonnull result, NSError *_Nullable err) {
+       completion:^(NSNumber *_Nonnull result, FlutterError *_Nullable err) {
          XCTAssertEqualObjects(@1, result);
          [expectation fulfill];
        }];
@@ -36,7 +36,7 @@
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   NSNumber *arg = @YES;
   [api aBoolValue:arg
-       completion:^(NSNumber *_Nonnull result, NSError *_Nullable err) {
+       completion:^(NSNumber *_Nonnull result, FlutterError *_Nullable err) {
          XCTAssertEqualObjects(arg, result);
          [expectation fulfill];
        }];
@@ -50,7 +50,7 @@
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   NSNumber *arg = @(1.5);
   [api aBoolValue:arg
-       completion:^(NSNumber *_Nonnull result, NSError *_Nullable err) {
+       completion:^(NSNumber *_Nonnull result, FlutterError *_Nullable err) {
          XCTAssertEqualObjects(arg, result);
          [expectation fulfill];
        }];
@@ -64,7 +64,7 @@
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   NSString *arg = @"hello";
   [api aStringValue:arg
-         completion:^(NSString *_Nonnull result, NSError *_Nullable err) {
+         completion:^(NSString *_Nonnull result, FlutterError *_Nullable err) {
            XCTAssertEqualObjects(arg, result);
            [expectation fulfill];
          }];
@@ -78,7 +78,7 @@
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   NSArray *arg = @[ @"hello" ];
   [api aListValue:arg
-       completion:^(NSArray *_Nonnull result, NSError *_Nullable err) {
+       completion:^(NSArray *_Nonnull result, FlutterError *_Nullable err) {
          XCTAssertEqualObjects(arg, result);
          [expectation fulfill];
        }];
@@ -92,7 +92,7 @@
   XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
   NSDictionary *arg = @{@"hello" : @1};
   [api aMapValue:arg
-      completion:^(NSDictionary *_Nonnull result, NSError *_Nullable err) {
+      completion:^(NSDictionary *_Nonnull result, FlutterError *_Nullable err) {
         XCTAssertEqualObjects(arg, result);
         [expectation fulfill];
       }];
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/AlternateLanguageTestPlugin.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/AlternateLanguageTestPlugin.m
index ee89e6b..578ef71 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/AlternateLanguageTestPlugin.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/AlternateLanguageTestPlugin.m
@@ -253,7 +253,7 @@
 }
 
 - (void)callFlutterNoopWithCompletion:(void (^)(FlutterError *_Nullable))completion {
-  [self.flutterAPI noopWithCompletion:^(NSError *error) {
+  [self.flutterAPI noopWithCompletion:^(FlutterError *error) {
     completion(error);
   }];
 }
@@ -261,7 +261,7 @@
 - (void)callFlutterEchoAllTypes:(AllTypes *)everything
                      completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoAllTypes:everything
-                     completion:^(AllTypes *value, NSError *error) {
+                     completion:^(AllTypes *value, FlutterError *error) {
                        completion(value, error);
                      }];
 }
@@ -274,7 +274,7 @@
   [self.flutterAPI sendMultipleNullableTypesABool:aNullableBool
                                             anInt:aNullableInt
                                           aString:aNullableString
-                                       completion:^(AllNullableTypes *value, NSError *error) {
+                                       completion:^(AllNullableTypes *value, FlutterError *error) {
                                          completion(value, error);
                                        }];
 }
@@ -282,7 +282,7 @@
 - (void)callFlutterEchoBool:(NSNumber *)aBool
                  completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoBool:aBool
-                 completion:^(NSNumber *value, NSError *error) {
+                 completion:^(NSNumber *value, FlutterError *error) {
                    completion(value, error);
                  }];
 }
@@ -290,7 +290,7 @@
 - (void)callFlutterEchoInt:(NSNumber *)anInt
                 completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoInt:anInt
-                completion:^(NSNumber *value, NSError *error) {
+                completion:^(NSNumber *value, FlutterError *error) {
                   completion(value, error);
                 }];
 }
@@ -298,7 +298,7 @@
 - (void)callFlutterEchoDouble:(NSNumber *)aDouble
                    completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoDouble:aDouble
-                   completion:^(NSNumber *value, NSError *error) {
+                   completion:^(NSNumber *value, FlutterError *error) {
                      completion(value, error);
                    }];
 }
@@ -306,7 +306,7 @@
 - (void)callFlutterEchoString:(NSString *)aString
                    completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoString:aString
-                   completion:^(NSString *value, NSError *error) {
+                   completion:^(NSString *value, FlutterError *error) {
                      completion(value, error);
                    }];
 }
@@ -315,7 +315,7 @@
                       completion:(void (^)(FlutterStandardTypedData *_Nullable,
                                            FlutterError *_Nullable))completion {
   [self.flutterAPI echoUint8List:aList
-                      completion:^(FlutterStandardTypedData *value, NSError *error) {
+                      completion:^(FlutterStandardTypedData *value, FlutterError *error) {
                         completion(value, error);
                       }];
 }
@@ -323,7 +323,7 @@
 - (void)callFlutterEchoList:(NSArray<id> *)aList
                  completion:(void (^)(NSArray<id> *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoList:aList
-                 completion:^(NSArray<id> *value, NSError *error) {
+                 completion:^(NSArray<id> *value, FlutterError *error) {
                    completion(value, error);
                  }];
 }
@@ -332,7 +332,7 @@
                 completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
                                      FlutterError *_Nullable))completion {
   [self.flutterAPI echoMap:aMap
-                completion:^(NSDictionary<NSString *, id> *value, NSError *error) {
+                completion:^(NSDictionary<NSString *, id> *value, FlutterError *error) {
                   completion(value, error);
                 }];
 }
@@ -341,7 +341,7 @@
                          completion:
                              (void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableBool:aBool
-                         completion:^(NSNumber *value, NSError *error) {
+                         completion:^(NSNumber *value, FlutterError *error) {
                            completion(value, error);
                          }];
 }
@@ -350,7 +350,7 @@
                         completion:
                             (void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableInt:anInt
-                        completion:^(NSNumber *value, NSError *error) {
+                        completion:^(NSNumber *value, FlutterError *error) {
                           completion(value, error);
                         }];
 }
@@ -359,7 +359,7 @@
                            completion:
                                (void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableDouble:aDouble
-                           completion:^(NSNumber *value, NSError *error) {
+                           completion:^(NSNumber *value, FlutterError *error) {
                              completion(value, error);
                            }];
 }
@@ -368,7 +368,7 @@
                            completion:
                                (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableString:aString
-                           completion:^(NSString *value, NSError *error) {
+                           completion:^(NSString *value, FlutterError *error) {
                              completion(value, error);
                            }];
 }
@@ -377,7 +377,7 @@
                               completion:(void (^)(FlutterStandardTypedData *_Nullable,
                                                    FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableUint8List:aList
-                              completion:^(FlutterStandardTypedData *value, NSError *error) {
+                              completion:^(FlutterStandardTypedData *value, FlutterError *error) {
                                 completion(value, error);
                               }];
 }
@@ -386,7 +386,7 @@
                          completion:
                              (void (^)(NSArray<id> *_Nullable, FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableList:aList
-                         completion:^(NSArray<id> *value, NSError *error) {
+                         completion:^(NSArray<id> *value, FlutterError *error) {
                            completion(value, error);
                          }];
 }
@@ -395,7 +395,7 @@
                         completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
                                              FlutterError *_Nullable))completion {
   [self.flutterAPI echoNullableMap:aMap
-                        completion:^(NSDictionary<NSString *, id> *value, NSError *error) {
+                        completion:^(NSDictionary<NSString *, id> *value, FlutterError *error) {
                           completion(value, error);
                         }];
 }
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
index 8a0c007..062382f 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #import <Foundation/Foundation.h>
@@ -317,13 +317,14 @@
 - (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger;
 /// A no-op function taking no arguments and returning no value, to sanity
 /// test basic calling.
-- (void)noopWithCompletion:(void (^)(NSError *_Nullable))completion;
+- (void)noopWithCompletion:(void (^)(FlutterError *_Nullable))completion;
 /// Returns the passed object, to test serialization and deserialization.
 - (void)echoAllTypes:(AllTypes *)everything
-          completion:(void (^)(AllTypes *_Nullable, NSError *_Nullable))completion;
+          completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed object, to test serialization and deserialization.
 - (void)echoAllNullableTypes:(AllNullableTypes *)everything
-                  completion:(void (^)(AllNullableTypes *_Nullable, NSError *_Nullable))completion;
+                  completion:
+                      (void (^)(AllNullableTypes *_Nullable, FlutterError *_Nullable))completion;
 /// Returns passed in arguments of multiple types.
 ///
 /// Tests multiple-arity FlutterApi handling.
@@ -331,51 +332,53 @@
                                  anInt:(nullable NSNumber *)aNullableInt
                                aString:(nullable NSString *)aNullableString
                             completion:(void (^)(AllNullableTypes *_Nullable,
-                                                 NSError *_Nullable))completion;
+                                                 FlutterError *_Nullable))completion;
 /// Returns the passed boolean, to test serialization and deserialization.
 - (void)echoBool:(NSNumber *)aBool
-      completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;
+      completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed int, to test serialization and deserialization.
 - (void)echoInt:(NSNumber *)anInt
-     completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;
+     completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed double, to test serialization and deserialization.
 - (void)echoDouble:(NSNumber *)aDouble
-        completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;
+        completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed string, to test serialization and deserialization.
 - (void)echoString:(NSString *)aString
-        completion:(void (^)(NSString *_Nullable, NSError *_Nullable))completion;
+        completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed byte list, to test serialization and deserialization.
 - (void)echoUint8List:(FlutterStandardTypedData *)aList
-           completion:(void (^)(FlutterStandardTypedData *_Nullable, NSError *_Nullable))completion;
+           completion:
+               (void (^)(FlutterStandardTypedData *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed list, to test serialization and deserialization.
 - (void)echoList:(NSArray<id> *)aList
-      completion:(void (^)(NSArray<id> *_Nullable, NSError *_Nullable))completion;
+      completion:(void (^)(NSArray<id> *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed map, to test serialization and deserialization.
 - (void)echoMap:(NSDictionary<NSString *, id> *)aMap
-     completion:(void (^)(NSDictionary<NSString *, id> *_Nullable, NSError *_Nullable))completion;
+     completion:
+         (void (^)(NSDictionary<NSString *, id> *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed boolean, to test serialization and deserialization.
 - (void)echoNullableBool:(nullable NSNumber *)aBool
-              completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;
+              completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed int, to test serialization and deserialization.
 - (void)echoNullableInt:(nullable NSNumber *)anInt
-             completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;
+             completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed double, to test serialization and deserialization.
 - (void)echoNullableDouble:(nullable NSNumber *)aDouble
-                completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;
+                completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed string, to test serialization and deserialization.
 - (void)echoNullableString:(nullable NSString *)aString
-                completion:(void (^)(NSString *_Nullable, NSError *_Nullable))completion;
+                completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed byte list, to test serialization and deserialization.
 - (void)echoNullableUint8List:(nullable FlutterStandardTypedData *)aList
                    completion:(void (^)(FlutterStandardTypedData *_Nullable,
-                                        NSError *_Nullable))completion;
+                                        FlutterError *_Nullable))completion;
 /// Returns the passed list, to test serialization and deserialization.
 - (void)echoNullableList:(nullable NSArray<id> *)aList
-              completion:(void (^)(NSArray<id> *_Nullable, NSError *_Nullable))completion;
+              completion:(void (^)(NSArray<id> *_Nullable, FlutterError *_Nullable))completion;
 /// Returns the passed map, to test serialization and deserialization.
 - (void)echoNullableMap:(nullable NSDictionary<NSString *, id> *)aMap
-             completion:
-                 (void (^)(NSDictionary<NSString *, id> *_Nullable, NSError *_Nullable))completion;
+             completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
+                                  FlutterError *_Nullable))completion;
 @end
 
 /// The codec used by HostTrivialApi.
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
index 7069c17..6970ca8 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #import "CoreTests.gen.h"
@@ -1716,7 +1716,7 @@
   }
   return self;
 }
-- (void)noopWithCompletion:(void (^)(NSError *_Nullable))completion {
+- (void)noopWithCompletion:(void (^)(FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.noop"
              binaryMessenger:self.binaryMessenger
@@ -1727,7 +1727,7 @@
                  }];
 }
 - (void)echoAllTypes:(AllTypes *)arg_everything
-          completion:(void (^)(AllTypes *_Nullable, NSError *_Nullable))completion {
+          completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes"
              binaryMessenger:self.binaryMessenger
@@ -1739,7 +1739,8 @@
                  }];
 }
 - (void)echoAllNullableTypes:(AllNullableTypes *)arg_everything
-                  completion:(void (^)(AllNullableTypes *_Nullable, NSError *_Nullable))completion {
+                  completion:
+                      (void (^)(AllNullableTypes *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes"
              binaryMessenger:self.binaryMessenger
@@ -1754,7 +1755,7 @@
                                  anInt:(nullable NSNumber *)arg_aNullableInt
                                aString:(nullable NSString *)arg_aNullableString
                             completion:(void (^)(AllNullableTypes *_Nullable,
-                                                 NSError *_Nullable))completion {
+                                                 FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:
           @"dev.flutter.pigeon.FlutterIntegrationCoreApi.sendMultipleNullableTypes"
@@ -1770,7 +1771,7 @@
                  }];
 }
 - (void)echoBool:(NSNumber *)arg_aBool
-      completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {
+      completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoBool"
              binaryMessenger:self.binaryMessenger
@@ -1782,7 +1783,7 @@
                  }];
 }
 - (void)echoInt:(NSNumber *)arg_anInt
-     completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {
+     completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoInt"
              binaryMessenger:self.binaryMessenger
@@ -1794,7 +1795,7 @@
                  }];
 }
 - (void)echoDouble:(NSNumber *)arg_aDouble
-        completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {
+        completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoDouble"
              binaryMessenger:self.binaryMessenger
@@ -1806,7 +1807,7 @@
                  }];
 }
 - (void)echoString:(NSString *)arg_aString
-        completion:(void (^)(NSString *_Nullable, NSError *_Nullable))completion {
+        completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString"
              binaryMessenger:self.binaryMessenger
@@ -1819,7 +1820,7 @@
 }
 - (void)echoUint8List:(FlutterStandardTypedData *)arg_aList
            completion:
-               (void (^)(FlutterStandardTypedData *_Nullable, NSError *_Nullable))completion {
+               (void (^)(FlutterStandardTypedData *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoUint8List"
              binaryMessenger:self.binaryMessenger
@@ -1831,7 +1832,7 @@
                  }];
 }
 - (void)echoList:(NSArray<id> *)arg_aList
-      completion:(void (^)(NSArray<id> *_Nullable, NSError *_Nullable))completion {
+      completion:(void (^)(NSArray<id> *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoList"
              binaryMessenger:self.binaryMessenger
@@ -1843,7 +1844,8 @@
                  }];
 }
 - (void)echoMap:(NSDictionary<NSString *, id> *)arg_aMap
-     completion:(void (^)(NSDictionary<NSString *, id> *_Nullable, NSError *_Nullable))completion {
+     completion:
+         (void (^)(NSDictionary<NSString *, id> *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoMap"
              binaryMessenger:self.binaryMessenger
@@ -1855,7 +1857,7 @@
                  }];
 }
 - (void)echoNullableBool:(nullable NSNumber *)arg_aBool
-              completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {
+              completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableBool"
              binaryMessenger:self.binaryMessenger
@@ -1867,7 +1869,7 @@
                  }];
 }
 - (void)echoNullableInt:(nullable NSNumber *)arg_anInt
-             completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {
+             completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableInt"
              binaryMessenger:self.binaryMessenger
@@ -1879,7 +1881,7 @@
                  }];
 }
 - (void)echoNullableDouble:(nullable NSNumber *)arg_aDouble
-                completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {
+                completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableDouble"
              binaryMessenger:self.binaryMessenger
@@ -1891,7 +1893,7 @@
                  }];
 }
 - (void)echoNullableString:(nullable NSString *)arg_aString
-                completion:(void (^)(NSString *_Nullable, NSError *_Nullable))completion {
+                completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableString"
              binaryMessenger:self.binaryMessenger
@@ -1904,7 +1906,7 @@
 }
 - (void)echoNullableUint8List:(nullable FlutterStandardTypedData *)arg_aList
                    completion:(void (^)(FlutterStandardTypedData *_Nullable,
-                                        NSError *_Nullable))completion {
+                                        FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableUint8List"
              binaryMessenger:self.binaryMessenger
@@ -1916,7 +1918,7 @@
                  }];
 }
 - (void)echoNullableList:(nullable NSArray<id> *)arg_aList
-              completion:(void (^)(NSArray<id> *_Nullable, NSError *_Nullable))completion {
+              completion:(void (^)(NSArray<id> *_Nullable, FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableList"
              binaryMessenger:self.binaryMessenger
@@ -1928,8 +1930,8 @@
                  }];
 }
 - (void)echoNullableMap:(nullable NSDictionary<NSString *, id> *)arg_aMap
-             completion:
-                 (void (^)(NSDictionary<NSString *, id> *_Nullable, NSError *_Nullable))completion {
+             completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
+                                  FlutterError *_Nullable))completion {
   FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
       messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoNullableMap"
              binaryMessenger:self.binaryMessenger
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart
index e2926fe..bf0b3a5 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart
index a2cce70..e869f1a 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/flutter_unittests.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart
index 251d69f..4378d4f 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart
index bc46451..04695f5 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart
index 65b9384..e53e111 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart
index 4d4a325..9b4749b 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart
index d481026..949f79d 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart
index e2926fe..bf0b3a5 100644
--- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart
+++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
index 8a1e42b..c946b5c 100644
--- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
+++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
@@ -1,8 +1,8 @@
 // Copyright 2013 The Flutter Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-// 
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+//
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package com.example.test_plugin
diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
index 14ec95b..db401db 100644
--- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
+++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
@@ -1,8 +1,8 @@
 // Copyright 2013 The Flutter Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-// 
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+//
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 import Foundation
@@ -117,23 +117,23 @@
   var aNullableString: String? = nil
 
   static func fromList(_ list: [Any?]) -> AllNullableTypes? {
-    let aNullableBool = list[0] as? Bool 
-    let aNullableInt = list[1] as? Int32 
-    let aNullableDouble = list[2] as? Double 
-    let aNullableByteArray = list[3] as? FlutterStandardTypedData 
-    let aNullable4ByteArray = list[4] as? FlutterStandardTypedData 
-    let aNullable8ByteArray = list[5] as? FlutterStandardTypedData 
-    let aNullableFloatArray = list[6] as? FlutterStandardTypedData 
-    let aNullableList = list[7] as? [Any?] 
-    let aNullableMap = list[8] as? [AnyHashable: Any?] 
-    let nullableNestedList = list[9] as? [[Bool?]?] 
-    let nullableMapWithAnnotations = list[10] as? [String?: String?] 
-    let nullableMapWithObject = list[11] as? [String?: Any?] 
+    let aNullableBool = list[0] as? Bool
+    let aNullableInt = list[1] as? Int32
+    let aNullableDouble = list[2] as? Double
+    let aNullableByteArray = list[3] as? FlutterStandardTypedData
+    let aNullable4ByteArray = list[4] as? FlutterStandardTypedData
+    let aNullable8ByteArray = list[5] as? FlutterStandardTypedData
+    let aNullableFloatArray = list[6] as? FlutterStandardTypedData
+    let aNullableList = list[7] as? [Any?]
+    let aNullableMap = list[8] as? [AnyHashable: Any?]
+    let nullableNestedList = list[9] as? [[Bool?]?]
+    let nullableMapWithAnnotations = list[10] as? [String?: String?]
+    let nullableMapWithObject = list[11] as? [String?: Any?]
     var aNullableEnum: AnEnum? = nil
     if let aNullableEnumRawValue = list[12] as? Int {
       aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)
     }
-    let aNullableString = list[13] as? String 
+    let aNullableString = list[13] as? String
 
     return AllNullableTypes(
       aNullableBool: aNullableBool,
diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
index 14ec95b..db401db 100644
--- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
+++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
@@ -1,8 +1,8 @@
 // Copyright 2013 The Flutter Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-// 
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+//
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 import Foundation
@@ -117,23 +117,23 @@
   var aNullableString: String? = nil
 
   static func fromList(_ list: [Any?]) -> AllNullableTypes? {
-    let aNullableBool = list[0] as? Bool 
-    let aNullableInt = list[1] as? Int32 
-    let aNullableDouble = list[2] as? Double 
-    let aNullableByteArray = list[3] as? FlutterStandardTypedData 
-    let aNullable4ByteArray = list[4] as? FlutterStandardTypedData 
-    let aNullable8ByteArray = list[5] as? FlutterStandardTypedData 
-    let aNullableFloatArray = list[6] as? FlutterStandardTypedData 
-    let aNullableList = list[7] as? [Any?] 
-    let aNullableMap = list[8] as? [AnyHashable: Any?] 
-    let nullableNestedList = list[9] as? [[Bool?]?] 
-    let nullableMapWithAnnotations = list[10] as? [String?: String?] 
-    let nullableMapWithObject = list[11] as? [String?: Any?] 
+    let aNullableBool = list[0] as? Bool
+    let aNullableInt = list[1] as? Int32
+    let aNullableDouble = list[2] as? Double
+    let aNullableByteArray = list[3] as? FlutterStandardTypedData
+    let aNullable4ByteArray = list[4] as? FlutterStandardTypedData
+    let aNullable8ByteArray = list[5] as? FlutterStandardTypedData
+    let aNullableFloatArray = list[6] as? FlutterStandardTypedData
+    let aNullableList = list[7] as? [Any?]
+    let aNullableMap = list[8] as? [AnyHashable: Any?]
+    let nullableNestedList = list[9] as? [[Bool?]?]
+    let nullableMapWithAnnotations = list[10] as? [String?: String?]
+    let nullableMapWithObject = list[11] as? [String?: Any?]
     var aNullableEnum: AnEnum? = nil
     if let aNullableEnumRawValue = list[12] as? Int {
       aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)
     }
-    let aNullableString = list[13] as? String 
+    let aNullableString = list[13] as? String
 
     return AllNullableTypes(
       aNullableBool: aNullableBool,
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
index c2bdca9..c256d57 100644
--- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #undef _HAS_EXCEPTIONS
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
index 90c0afd..024c882 100644
--- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v7.2.1), do not edit directly.
+// Autogenerated from Pigeon (v8.0.0), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #ifndef PIGEON_CORE_TESTS_GEN_H_
diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml
index 0b62f13..29140d9 100644
--- a/packages/pigeon/pubspec.yaml
+++ b/packages/pigeon/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
 repository: https://github.com/flutter/packages/tree/main/packages/pigeon
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Apigeon
-version: 7.2.1 # This must match the version in lib/generator_tools.dart
+version: 8.0.0 # This must match the version in lib/generator_tools.dart
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart
index e54bf59..a4e5f04 100644
--- a/packages/pigeon/test/objc_generator_test.dart
+++ b/packages/pigeon/test/objc_generator_test.dart
@@ -801,7 +801,7 @@
     );
     generator.generate(generatorOptions, root, sink);
     final String code = sink.toString();
-    expect(code, contains('completion:(void (^)(NSError *_Nullable))'));
+    expect(code, contains('completion:(void (^)(FlutterError *_Nullable))'));
   });
 
   test('gen flutter void return source', () {
@@ -836,7 +836,7 @@
     );
     generator.generate(generatorOptions, root, sink);
     final String code = sink.toString();
-    expect(code, contains('completion:(void (^)(NSError *_Nullable))'));
+    expect(code, contains('completion:(void (^)(FlutterError *_Nullable))'));
     expect(code, contains('completion(nil)'));
   });
 
@@ -927,7 +927,7 @@
     expect(
         code,
         contains(
-            '(void)doSomethingWithCompletion:(void (^)(ABCOutput *_Nullable, NSError *_Nullable))completion'));
+            '(void)doSomethingWithCompletion:(void (^)(ABCOutput *_Nullable, FlutterError *_Nullable))completion'));
   });
 
   test('gen flutter void arg source', () {
@@ -959,7 +959,7 @@
     expect(
         code,
         contains(
-            '(void)doSomethingWithCompletion:(void (^)(ABCOutput *_Nullable, NSError *_Nullable))completion'));
+            '(void)doSomethingWithCompletion:(void (^)(ABCOutput *_Nullable, FlutterError *_Nullable))completion'));
     expect(code, contains('channel sendMessage:nil'));
   });
 
@@ -1818,7 +1818,7 @@
       expect(
           code,
           contains(
-              '- (void)addX:(NSNumber *)x y:(NSNumber *)y completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion;'));
+              '- (void)addX:(NSNumber *)x y:(NSNumber *)y completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;'));
     }
     {
       final StringBuffer sink = StringBuffer();
@@ -1834,7 +1834,7 @@
       expect(
           code,
           contains(
-              '- (void)addX:(NSNumber *)arg_x y:(NSNumber *)arg_y completion:(void (^)(NSNumber *_Nullable, NSError *_Nullable))completion {'));
+              '- (void)addX:(NSNumber *)arg_x y:(NSNumber *)arg_y completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion {'));
       expect(
           code,
           contains(
@@ -1977,7 +1977,7 @@
     expect(
         code,
         matches(
-            r'doitWithCompletion.*void.*NSNumber \*_Nullable.*NSError.*completion;'));
+            r'doitWithCompletion.*void.*NSNumber \*_Nullable.*FlutterError.*completion;'));
   });
 
   test('return nullable flutter source', () {
