diff --git a/tutorial/dart/client/pubspec.yaml b/tutorial/dart/client/pubspec.yaml
index a8c148d..4ffaa42 100644
--- a/tutorial/dart/client/pubspec.yaml
+++ b/tutorial/dart/client/pubspec.yaml
@@ -22,7 +22,7 @@
 homepage: http://thrift.apache.org
 
 environment:
-  sdk: ">=1.13.0 <3.0.0"
+  sdk: ">=2.12.0 <4.0.0"
 
 dependencies:
   shared:
diff --git a/tutorial/dart/client/web/client.dart b/tutorial/dart/client/web/client.dart
index 4f02d0d..be5cfe6 100644
--- a/tutorial/dart/client/web/client.dart
+++ b/tutorial/dart/client/web/client.dart
@@ -24,7 +24,7 @@
 
 /// Adapted from the AS3 tutorial
 void main() {
-  new CalculatorUI(querySelector('#output')).start();
+  new CalculatorUI(querySelector('#output') as DivElement ).start();
 }
 
 class CalculatorUI {
@@ -32,8 +32,8 @@
 
   CalculatorUI(this.output);
 
-  TTransport _transport;
-  Calculator _calculatorClient;
+  late TTransport _transport;
+  late Calculator _calculatorClient;
 
   void start() {
     _buildInterface();
@@ -120,12 +120,12 @@
   void _onAddClick(MouseEvent e) {
     _validate();
 
-    InputElement num1 = querySelector("#add1");
-    InputElement num2 = querySelector("#add2");
-    SpanElement result = querySelector("#addResult");
+    InputElement num1 = querySelector("#add1") as InputElement;
+    InputElement num2 = querySelector("#add2")as InputElement;
+    SpanElement result = querySelector("#addResult") as SpanElement;
 
     _calculatorClient
-        .add(int.parse(num1.value), int.parse(num2.value))
+        .add(int.parse(num1.value ?? "0"), int.parse(num2.value ?? "0"))
         .then((int n) {
       result.text = "$n";
     });
@@ -211,21 +211,21 @@
   void _onCalcClick(MouseEvent e) {
     _validate();
 
-    InputElement num1 = querySelector("#calc1");
-    InputElement num2 = querySelector("#calc2");
-    SelectElement op = querySelector("#calcOp");
-    SpanElement result = querySelector("#calcResult");
-    InputElement logId = querySelector("#logId");
-    InputElement comment = querySelector("#comment");
+    InputElement num1 = querySelector("#calc1") as InputElement;
+    InputElement num2 = querySelector("#calc2")as InputElement;
+    SelectElement op = querySelector("#calcOp") as SelectElement;
+    SpanElement result = querySelector("#calcResult") as SpanElement;
+    InputElement logId = querySelector("#logId") as InputElement;
+    InputElement comment = querySelector("#comment") as InputElement;
 
-    int logIdValue = int.parse(logId.value);
+    int logIdValue = int.parse(logId.value ?? "0");
     logId.value = (logIdValue + 1).toString();
 
     Work work = new Work();
-    work.num1 = int.parse(num1.value);
-    work.num2 = int.parse(num2.value);
-    work.op = int.parse(op.options[op.selectedIndex].value);
-    work.comment = comment.value;
+    work.num1 = int.parse(num1.value!);
+    work.num2 = int.parse(num2.value!);
+    work.op = int.parse(op.options[op.selectedIndex!].value);
+    work.comment = comment.value!;
 
     _calculatorClient.calculate(logIdValue, work).then((int n) {
       result.text = "$n";
@@ -266,13 +266,13 @@
   void _onGetStructClick(MouseEvent e) {
     _validate();
 
-    InputElement structKey = querySelector("#structKey");
-    TextAreaElement result = querySelector("#getStructResult");
+    InputElement structKey = querySelector("#structKey") as InputElement;
+    TextAreaElement result = querySelector("#getStructResult") as TextAreaElement;
 
     _calculatorClient
-        .getStruct(int.parse(structKey.value))
-        .then((SharedStruct s) {
-      result.text = "${s.toString()}";
+        .getStruct(int.parse(structKey.value!))
+        .then((SharedStruct? s) {
+      result.text = "${s?.toString()}";
     });
   }
 }
