diff --git a/lib/dart/test/protocol/t_protocol_test.dart b/lib/dart/test/protocol/t_protocol_test.dart
index 15d973c..4b6ca09 100644
--- a/lib/dart/test/protocol/t_protocol_test.dart
+++ b/lib/dart/test/protocol/t_protocol_test.dart
@@ -15,6 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
+
 library thrift.test.transport.t_json_protocol_test;
 
 import 'dart:async';
@@ -27,7 +28,7 @@
 void main() {
   final message = TMessage('my message', TMessageType.ONEWAY, 123);
 
-  TProtocol protocol;
+  late TProtocol protocol;
 
   Primitive getPrimitive(int tType) {
     switch (tType) {
@@ -69,7 +70,7 @@
     expect(output, input);
   }
 
-  Future primitiveNullTest(Primitive primitive) async {
+  /*Future primitiveNullTest(Primitive primitive) async {
     primitive.write(null);
     protocol.writeMessageEnd();
 
@@ -79,7 +80,7 @@
     var output = primitive.read();
 
     expect(output, primitive.defaultValue);
-  }
+  }*/
 
   var sharedTests = () {
     test('Test message', () async {
@@ -179,61 +180,61 @@
     test('Test bool', () async {
       await primitiveTest(getPrimitive(TType.BOOL), true);
     });
-
+/*
     test('Test bool null', () async {
       await primitiveNullTest(getPrimitive(TType.BOOL));
     });
-
+*/
     test('Test byte', () async {
       await primitiveTest(getPrimitive(TType.BYTE), 64);
     });
-
+/*
     test('Test byte null', () async {
       await primitiveNullTest(getPrimitive(TType.BYTE));
     });
-
+*/
     test('Test I16', () async {
       await primitiveTest(getPrimitive(TType.I16), 32767);
     });
-
+/*
     test('Test I16 null', () async {
       await primitiveNullTest(getPrimitive(TType.I16));
     });
-
+*/
     test('Test I32', () async {
       await primitiveTest(getPrimitive(TType.I32), 2147483647);
     });
-
+/*
     test('Test I32 null', () async {
       await primitiveNullTest(getPrimitive(TType.I32));
     });
-
+*/
     test('Test I64', () async {
       await primitiveTest(getPrimitive(TType.I64), 9223372036854775807);
     });
-
+/*
     test('Test I64 null', () async {
       await primitiveNullTest(getPrimitive(TType.I64));
     });
-
+*/
     test('Test double', () async {
       await primitiveTest(getPrimitive(TType.DOUBLE), 3.1415926);
     });
-
+/*
     test('Test double null', () async {
       await primitiveNullTest(getPrimitive(TType.DOUBLE));
     });
-
+*/
     test('Test string', () async {
       var input = 'There are only two hard things in computer science: '
           'cache invalidation, naming things, and off-by-one errors.';
       await primitiveTest(getPrimitive(TType.STRING), input);
     });
-
+/*
     test('Test string null', () async {
       await primitiveNullTest(getPrimitive(TType.STRING));
     });
-
+*/
     test('Test binary', () async {
       var input = Uint8List.fromList(List.filled(100, 123));
 
diff --git a/lib/dart/test/serializer/serializer_test.dart b/lib/dart/test/serializer/serializer_test.dart
index 89883cb..33df024 100644
--- a/lib/dart/test/serializer/serializer_test.dart
+++ b/lib/dart/test/serializer/serializer_test.dart
@@ -25,9 +25,9 @@
 
 void main() {
   var serializer = () {
-    TDeserializer deserializer;
-    TSerializer serializer;
-    TestTObject testTObject;
+    TDeserializer deserializer = TDeserializer();
+    TSerializer serializer = TSerializer();
+    TestTObject testTObject = TestTObject();
 
     setUp(() {
       serializer = TSerializer();
@@ -39,7 +39,7 @@
       testTObject.d = 15.25;
       testTObject.i = 10;
 
-      var testList = List<String>();
+      var testList = <String>[];
       testList.add("TEST 1");
       testList.add("TEST 2");
 
diff --git a/lib/dart/test/serializer/serializer_test_data.dart b/lib/dart/test/serializer/serializer_test_data.dart
index fc488f4..f5580ff 100644
--- a/lib/dart/test/serializer/serializer_test_data.dart
+++ b/lib/dart/test/serializer/serializer_test_data.dart
@@ -30,15 +30,15 @@
   static final TField _L_FIELD_DESC = TField("l", TType.LIST, 4);
   static final TField _B_FIELD_DESC = TField("b", TType.BOOL, 5);
 
-  int _i;
+  int? _i;
   static const int I = 1;
-  double _d;
+  double? _d;
   static const int D = 2;
-  String _s;
+  String? _s;
   static const int S = 3;
-  List<String> _l;
+  List<String>? _l;
   static const int L = 4;
-  bool _b;
+  bool? _b;
   static const int B = 5;
 
   bool __isset_i = false;
@@ -48,9 +48,9 @@
   TestTObject();
 
   // i
-  int get i => this._i;
+  int? get i => this._i;
 
-  set i(int i) {
+  set i(int? i) {
     this._i = i;
     this.__isset_i = true;
   }
@@ -62,9 +62,9 @@
   }
 
   // d
-  double get d => this._d;
+  double? get d => this._d;
 
-  set d(double d) {
+  set d(double? d) {
     this._d = d;
     this.__isset_d = true;
   }
@@ -76,9 +76,9 @@
   }
 
   // s
-  String get s => this._s;
+  String? get s => this._s;
 
-  set s(String s) {
+  set s(String? s) {
     this._s = s;
   }
 
@@ -89,9 +89,9 @@
   }
 
   // l
-  List<String> get l => this._l;
+  List<String>? get l => this._l;
 
-  set l(List<String> l) {
+  set l(List<String>? l) {
     this._l = l;
   }
 
@@ -102,9 +102,9 @@
   }
 
   // b
-  bool get b => this._b;
+  bool? get b => this._b;
 
-  set b(bool b) {
+  set b(bool? b) {
     this._b = b;
     this.__isset_b = true;
   }
@@ -134,13 +134,13 @@
   }
 
   @override
-  setFieldValue(int fieldID, Object value) {
+  setFieldValue(int fieldID, Object? value) {
     switch (fieldID) {
       case I:
         if (value == null) {
           unsetI();
         } else {
-          this.i = value;
+          this.i = value as int;
         }
         break;
 
@@ -148,7 +148,7 @@
         if (value == null) {
           unsetD();
         } else {
-          this.d = value;
+          this.d = value as double;
         }
         break;
 
@@ -156,7 +156,7 @@
         if (value == null) {
           unsetS();
         } else {
-          this.s = value;
+          this.s = value as String;
         }
         break;
 
@@ -172,7 +172,7 @@
         if (value == null) {
           unsetB();
         } else {
-          this.b = value;
+          this.b = value as bool;
         }
         break;
 
@@ -237,11 +237,11 @@
           if (field.type == TType.LIST) {
             {
               TList _list74 = iprot.readListBegin();
-              this.l = List<String>();
+              this.l = <String>[];
               for (int _i75 = 0; _i75 < _list74.length; ++_i75) {
                 String _elem76;
                 _elem76 = iprot.readString();
-                this.l.add(_elem76);
+                this.l?.add(_elem76);
               }
               iprot.readListEnd();
             }
@@ -275,21 +275,21 @@
 
     oprot.writeStructBegin(_STRUCT_DESC);
     oprot.writeFieldBegin(_I_FIELD_DESC);
-    oprot.writeI32(this.i);
+    oprot.writeI32(this.i!);
     oprot.writeFieldEnd();
     oprot.writeFieldBegin(_D_FIELD_DESC);
-    oprot.writeDouble(this.d);
+    oprot.writeDouble(this.d!);
     oprot.writeFieldEnd();
     if (this.s != null) {
       oprot.writeFieldBegin(_S_FIELD_DESC);
-      oprot.writeString(this.s);
+      oprot.writeString(this.s!);
       oprot.writeFieldEnd();
     }
     if (this.l != null) {
       oprot.writeFieldBegin(_L_FIELD_DESC);
       {
-        oprot.writeListBegin(TList(TType.STRING, this.l.length));
-        for (var elem77 in this.l) {
+        oprot.writeListBegin(TList(TType.STRING, this.l!.length));
+        for (var elem77 in this.l!) {
           oprot.writeString(elem77);
         }
         oprot.writeListEnd();
@@ -297,7 +297,7 @@
       oprot.writeFieldEnd();
     }
     oprot.writeFieldBegin(_B_FIELD_DESC);
-    oprot.writeBool(this.b);
+    oprot.writeBool(this.b!);
     oprot.writeFieldEnd();
     oprot.writeFieldStop();
     oprot.writeStructEnd();
diff --git a/lib/dart/test/t_application_error_test.dart b/lib/dart/test/t_application_error_test.dart
index 848ce56..cecefc7 100644
--- a/lib/dart/test/t_application_error_test.dart
+++ b/lib/dart/test/t_application_error_test.dart
@@ -21,7 +21,7 @@
 import 'package:thrift/thrift.dart';
 
 void main() {
-  TProtocol protocol;
+  late TProtocol protocol;
 
   setUp(() {
     protocol = TBinaryProtocol(TBufferedTransport());
diff --git a/lib/dart/test/transport/t_framed_transport_test.dart b/lib/dart/test/transport/t_framed_transport_test.dart
index d9a15a5..a028c6f 100644
--- a/lib/dart/test/transport/t_framed_transport_test.dart
+++ b/lib/dart/test/transport/t_framed_transport_test.dart
@@ -28,10 +28,10 @@
   group('TFramedTransport partial reads', () {
     final flushAwaitDuration = Duration(seconds: 10);
 
-    FakeReadOnlySocket socket;
-    TSocketTransport socketTransport;
-    TFramedTransport transport;
-    var messageAvailable;
+    late FakeReadOnlySocket socket;
+    late TSocketTransport socketTransport;
+    late TFramedTransport transport;
+    late bool messageAvailable;
 
     setUp(() {
       socket = FakeReadOnlySocket();
diff --git a/lib/dart/test/transport/t_http_transport_test.dart b/lib/dart/test/transport/t_http_transport_test.dart
index 13f0ee9..d0d91f4 100644
--- a/lib/dart/test/transport/t_http_transport_test.dart
+++ b/lib/dart/test/transport/t_http_transport_test.dart
@@ -34,8 +34,8 @@
   const utf8Codec = Utf8Codec();
 
   group('THttpClientTransport', () {
-    FakeHttpClient client;
-    THttpClientTransport transport;
+    late FakeHttpClient client;
+    late THttpClientTransport transport;
 
     setUp(() {
       client = FakeHttpClient(sync: false);
@@ -78,8 +78,8 @@
   });
 
   group('THttpClientTransport with multiple messages', () {
-    FakeHttpClient client;
-    THttpClientTransport transport;
+    late FakeHttpClient client;
+    late THttpClientTransport transport;
 
     setUp(() {
       client = FakeHttpClient(sync: true);
@@ -88,7 +88,7 @@
     });
 
     test('Test read correct buffer after flush', () async {
-      String bufferText;
+      String bufferText= "";
       var expectedText = 'response 1';
       var expectedBytes = utf8Codec.encode(expectedText);
 
@@ -124,8 +124,8 @@
 
   @override
   Future<Response> post(url,
-      {Map<String, String> headers, body, Encoding encoding}) {
-    postRequest = body;
+      {Map<String, String>? headers, body, Encoding? encoding}) {
+    postRequest = body.toString();
     var response = Response(postResponse, 200);
 
     if (sync) {
@@ -136,33 +136,34 @@
   }
 
   @override
-  Future<Response> head(url, {Map<String, String> headers}) =>
+  Future<Response> head(url, {Map<String, String>? headers}) =>
       throw UnimplementedError();
 
   @override
-  Future<Response> get(url, {Map<String, String> headers}) =>
+  Future<Response> get(url, {Map<String, String>? headers}) =>
       throw UnimplementedError();
 
   @override
   Future<Response> put(url,
-          {Map<String, String> headers, body, Encoding encoding}) =>
+          {Map<String, String>? headers, body, Encoding? encoding}) =>
       throw UnimplementedError();
 
   @override
   Future<Response> patch(url,
-          {Map<String, String> headers, body, Encoding encoding}) =>
+          {Map<String, String>? headers, body, Encoding? encoding}) =>
       throw UnimplementedError();
 
   @override
-  Future<Response> delete(url, {Map<String, String> headers}) =>
+  Future<Response> delete(Uri url,
+          {Map<String, String>? headers, Object? body, Encoding? encoding}) =>
       throw UnimplementedError();
 
   @override
-  Future<String> read(url, {Map<String, String> headers}) =>
+  Future<String> read(url, {Map<String, String>? headers}) =>
       throw UnimplementedError();
 
   @override
-  Future<Uint8List> readBytes(url, {Map<String, String> headers}) =>
+  Future<Uint8List> readBytes(url, {Map<String, String>? headers}) =>
       throw UnimplementedError();
 
   @override
diff --git a/lib/dart/test/transport/t_socket_transport_test.dart b/lib/dart/test/transport/t_socket_transport_test.dart
index d46f5ed..80edb68 100644
--- a/lib/dart/test/transport/t_socket_transport_test.dart
+++ b/lib/dart/test/transport/t_socket_transport_test.dart
@@ -39,8 +39,8 @@
   final framedResponseBase64 = base64.encode(_getFramedResponse(responseBytes));
 
   group('TClientSocketTransport', () {
-    FakeSocket socket;
-    TTransport transport;
+    late FakeSocket socket;
+    late TTransport transport;
 
     setUp(() async {
       socket = FakeSocket(sync: false);
@@ -74,8 +74,8 @@
   }, timeout: Timeout(Duration(seconds: 1)));
 
   group('TClientSocketTransport with FramedTransport', () {
-    FakeSocket socket;
-    TTransport transport;
+    late FakeSocket socket;
+    late TTransport transport;
 
     setUp(() async {
       socket = FakeSocket(sync: true);
@@ -87,7 +87,7 @@
     });
 
     test('Test client sending data over framed transport', () async {
-      String bufferText;
+      String bufferText = "";
 
       Future responseReady = transport.flush().then((_) {
         var buffer = Uint8List(responseBytes.length);
@@ -104,9 +104,9 @@
   }, timeout: Timeout(Duration(seconds: 1)));
 
   group('TAsyncClientSocketTransport', () {
-    FakeSocket socket;
-    FakeProtocolFactory protocolFactory;
-    TTransport transport;
+    late FakeSocket socket;
+    late FakeProtocolFactory protocolFactory;
+    late TTransport transport;
 
     setUp(() async {
       socket = FakeSocket(sync: true);
@@ -122,7 +122,7 @@
     });
 
     test('Test response correlates to correct request', () async {
-      String bufferText;
+      String bufferText = "";
 
       Future responseReady = transport.flush().then((_) {
         var buffer = Uint8List(responseBytes.length);
@@ -152,9 +152,9 @@
   }, timeout: Timeout(Duration(seconds: 1)));
 
   group('TAsyncClientSocketTransport with TFramedTransport', () {
-    FakeSocket socket;
-    FakeProtocolFactory protocolFactory;
-    TTransport transport;
+    late FakeSocket socket;
+    late FakeProtocolFactory protocolFactory;
+    late TTransport transport;
 
     setUp(() async {
       socket = FakeSocket(sync: true);
@@ -173,7 +173,7 @@
     });
 
     test('Test async client sending data over framed transport', () async {
-      String bufferText;
+      String bufferText = "";
 
       Future responseReady = transport.flush().then((_) {
         var buffer = Uint8List(responseBytes.length);
@@ -251,7 +251,7 @@
         _onErrorController = StreamController.broadcast(sync: sync),
         _onMessageController = StreamController.broadcast(sync: sync);
 
-  bool _isOpen;
+  bool _isOpen = false;
 
   @override
   bool get isOpen => _isOpen;
@@ -271,8 +271,8 @@
     _onStateController.add(TSocketState.CLOSED);
   }
 
-  Uint8List _sendPayload;
-  Uint8List get sendPayload => _sendPayload;
+  Uint8List? _sendPayload;
+  Uint8List? get sendPayload => _sendPayload;
 
   @override
   void send(Uint8List data) {
@@ -292,7 +292,7 @@
 class FakeProtocolFactory implements TProtocolFactory {
   FakeProtocolFactory();
 
-  TMessage message;
+  TMessage message = TMessage("", TMessageType.CALL, 0 /* seqid */);
 
   @override
   getProtocol(TTransport transport) => FakeProtocol(message);
diff --git a/lib/dart/test/transport/t_transport_test.dart b/lib/dart/test/transport/t_transport_test.dart
index 4758593..e60f61d 100644
--- a/lib/dart/test/transport/t_transport_test.dart
+++ b/lib/dart/test/transport/t_transport_test.dart
@@ -25,16 +25,19 @@
   group('TTransportFactory', () {
     test('transport is returned from base factory', () async {
       TTransport result;
-      TTransport transport;
+      TTransport? transport;
 
       var factory = TTransportFactory();
 
-      result = await factory.getTransport(transport);
-      expect(result, isNull);
+      try {
+        result = await factory.getTransport(transport!);
+        expect(result, isNull);
+      } catch (e) {
+        expect(e, isA<TypeError>());
+      }
 
-      transport = TBufferedTransport();
+      transport = TBufferedTransport()..open();
       result = await factory.getTransport(transport);
-
       expect(result, transport);
     });
   });
