Allow a `null` result (#77)

Fixes #76

Add missing nullable annotation on the `result` variable and a test
which fails if the variable is non-nullable.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5b3c860..6a819f8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.0.1-dev
+
+* Fix a bug where a `null` result to a request caused an exception.
+
 ## 3.0.0
 
 * Migrate to null safety.
diff --git a/lib/src/server.dart b/lib/src/server.dart
index a2b4dc1..ac34edf 100644
--- a/lib/src/server.dart
+++ b/lib/src/server.dart
@@ -201,7 +201,7 @@
       var method = _methods[name];
       method ??= _tryFallbacks;
 
-      Object result;
+      Object? result;
       if (method is ZeroArgumentFunction) {
         if (request.containsKey('params')) {
           throw RpcException.invalidParams('No parameters are allowed for '
diff --git a/test/server/server_test.dart b/test/server/server_test.dart
index 14ae1e4..8213ee7 100644
--- a/test/server/server_test.dart
+++ b/test/server/server_test.dart
@@ -44,6 +44,15 @@
         completion(equals({'jsonrpc': '2.0', 'result': 'foo', 'id': 1234})));
   });
 
+  test('Allows a `null` result', () {
+    controller.server.registerMethod('foo', () => null);
+
+    expect(
+        controller
+            .handleRequest({'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}),
+        completion(equals({'jsonrpc': '2.0', 'result': null, 'id': 1234})));
+  });
+
   test('a method that takes no parameters rejects parameters', () {
     controller.server.registerMethod('foo', () => 'foo');