fix a number of lints (#214)

Ignore omit_local_variable_types – too many to fix for now
diff --git a/.travis.yml b/.travis.yml
index c7cf7e8..9c8e623 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,7 @@
 language: dart
 
 dart:
-  - 2.1.0
+  - 2.3.0
   - dev
 
 script: ./tool/travis.sh
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 9a02cf1..0509ed3 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,7 +1,11 @@
 include: package:pedantic/analysis_options.yaml
+
 analyzer:
 #  strong-mode:
 #    implicit-casts: false
+  errors:
+    omit_local_variable_types: ignore #1929 cases
+
 linter:
   rules:
   - always_declare_return_types
diff --git a/benchmark/matrix4_tween_bench.dart b/benchmark/matrix4_tween_bench.dart
index 17b580c..7885013 100644
--- a/benchmark/matrix4_tween_bench.dart
+++ b/benchmark/matrix4_tween_bench.dart
@@ -22,11 +22,11 @@
 
   @override
   void run() {
-    double sum_traces = 0;
-    for (int i = 0; i <= 1024; i++) {
-      double t = i / 1024.0;
-      Matrix4 m1 = lerp(beginTransform, endTransform, t);
-      Matrix4 m2 = lerp(endTransform, beginTransform, t);
+    var sum_traces = 0.0;
+    for (var i = 0; i <= 1024; i++) {
+      var t = i / 1024.0;
+      var m1 = lerp(beginTransform, endTransform, t);
+      var m2 = lerp(endTransform, beginTransform, t);
       sum_traces += m1.trace();
       sum_traces += m2.trace();
     }
@@ -39,7 +39,7 @@
 }
 
 class Matrix4TweenBenchmark1 extends BenchmarkBase with Setup {
-  Matrix4TweenBenchmark1() : super("Matrix4TweenBenchmark1");
+  Matrix4TweenBenchmark1() : super('Matrix4TweenBenchmark1');
 
   @override
   Matrix4 lerp(Matrix4 begin, Matrix4 end, double t) {
@@ -61,7 +61,7 @@
 }
 
 class Matrix4TweenBenchmark2 extends BenchmarkBase with Setup {
-  Matrix4TweenBenchmark2() : super("Matrix4TweenBenchmark2");
+  Matrix4TweenBenchmark2() : super('Matrix4TweenBenchmark2');
 
   @override
   Matrix4 lerp(Matrix4 begin, Matrix4 end, double t) {
@@ -86,7 +86,7 @@
 }
 
 class Matrix4TweenBenchmark3 extends BenchmarkBase with Setup {
-  Matrix4TweenBenchmark3() : super("Matrix4TweenBenchmark3");
+  Matrix4TweenBenchmark3() : super('Matrix4TweenBenchmark3');
 
   @override
   Matrix4 lerp(Matrix4 begin, Matrix4 end, double t) {
diff --git a/benchmark/matrix_bench.dart b/benchmark/matrix_bench.dart
index 247885d..6cc87bc 100644
--- a/benchmark/matrix_bench.dart
+++ b/benchmark/matrix_bench.dart
@@ -11,7 +11,7 @@
 import 'package:benchmark_harness/benchmark_harness.dart';
 
 class MatrixMultiplyBenchmark extends BenchmarkBase {
-  MatrixMultiplyBenchmark() : super("MatrixMultiply");
+  MatrixMultiplyBenchmark() : super('MatrixMultiply');
   final Float32List A = Float32List(16);
   final Float32List B = Float32List(16);
   final Float32List C = Float32List(16);
@@ -22,14 +22,14 @@
 
   @override
   void run() {
-    for (int i = 0; i < 200; i++) {
+    for (var i = 0; i < 200; i++) {
       Matrix44Operations.multiply(C, 0, A, 0, B, 0);
     }
   }
 }
 
 class SIMDMatrixMultiplyBenchmark extends BenchmarkBase {
-  SIMDMatrixMultiplyBenchmark() : super("SIMDMatrixMultiply");
+  SIMDMatrixMultiplyBenchmark() : super('SIMDMatrixMultiply');
   final Float32x4List A = Float32x4List(4);
   final Float32x4List B = Float32x4List(4);
   final Float32x4List C = Float32x4List(4);
@@ -40,14 +40,14 @@
 
   @override
   void run() {
-    for (int i = 0; i < 200; i++) {
+    for (var i = 0; i < 200; i++) {
       Matrix44SIMDOperations.multiply(C, 0, A, 0, B, 0);
     }
   }
 }
 
 class VectorTransformBenchmark extends BenchmarkBase {
-  VectorTransformBenchmark() : super("VectorTransform");
+  VectorTransformBenchmark() : super('VectorTransform');
   final Float32List A = Float32List(16);
   final Float32List B = Float32List(4);
   final Float32List C = Float32List(4);
@@ -58,14 +58,14 @@
 
   @override
   void run() {
-    for (int i = 0; i < 200; i++) {
+    for (var i = 0; i < 200; i++) {
       Matrix44Operations.transform4(C, 0, A, 0, B, 0);
     }
   }
 }
 
 class SIMDVectorTransformBenchmark extends BenchmarkBase {
-  SIMDVectorTransformBenchmark() : super("SIMDVectorTransform");
+  SIMDVectorTransformBenchmark() : super('SIMDVectorTransform');
   final Float32x4List A = Float32x4List(4);
   final Float32x4List B = Float32x4List(1);
   final Float32x4List C = Float32x4List(1);
@@ -76,14 +76,14 @@
 
   @override
   void run() {
-    for (int i = 0; i < 200; i++) {
+    for (var i = 0; i < 200; i++) {
       Matrix44SIMDOperations.transform4(C, 0, A, 0, B, 0);
     }
   }
 }
 
 class ViewMatrixBenchmark extends BenchmarkBase {
-  ViewMatrixBenchmark() : super("setViewMatrix");
+  ViewMatrixBenchmark() : super('setViewMatrix');
 
   final Matrix4 M = Matrix4.zero();
   final Vector3 P = Vector3.zero();
@@ -96,14 +96,14 @@
 
   @override
   void run() {
-    for (int i = 0; i < 100; i++) {
+    for (var i = 0; i < 100; i++) {
       setViewMatrix(M, P, F, U);
     }
   }
 }
 
 class Aabb2TransformBenchmark extends BenchmarkBase {
-  Aabb2TransformBenchmark() : super("aabb2Transform");
+  Aabb2TransformBenchmark() : super('aabb2Transform');
 
   static final Matrix3 M = Matrix3.rotationZ(math.pi / 4);
   static final Vector2 P1 = Vector2(10.0, 10.0);
@@ -120,7 +120,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 100; i++) {
+    for (var i = 0; i < 100; i++) {
       temp.copyFrom(B1);
       temp.transform(M);
       temp.copyFrom(B2);
@@ -132,7 +132,7 @@
 }
 
 class Aabb2RotateBenchmark extends BenchmarkBase {
-  Aabb2RotateBenchmark() : super("aabb2Rotate");
+  Aabb2RotateBenchmark() : super('aabb2Rotate');
 
   static final Matrix3 M = Matrix3.rotationZ(math.pi / 4);
   static final Vector2 P1 = Vector2(10.0, 10.0);
@@ -149,7 +149,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 100; i++) {
+    for (var i = 0; i < 100; i++) {
       temp.copyFrom(B1);
       temp.rotate(M);
       temp.copyFrom(B2);
@@ -161,7 +161,7 @@
 }
 
 class Aabb3TransformBenchmark extends BenchmarkBase {
-  Aabb3TransformBenchmark() : super("aabb3Transform");
+  Aabb3TransformBenchmark() : super('aabb3Transform');
 
   static final Matrix4 M = Matrix4.rotationZ(math.pi / 4);
   static final Vector3 P1 = Vector3(10.0, 10.0, 0.0);
@@ -178,7 +178,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 100; i++) {
+    for (var i = 0; i < 100; i++) {
       temp.copyFrom(B1);
       temp.transform(M);
       temp.copyFrom(B2);
@@ -190,7 +190,7 @@
 }
 
 class Aabb3RotateBenchmark extends BenchmarkBase {
-  Aabb3RotateBenchmark() : super("aabb3Rotate");
+  Aabb3RotateBenchmark() : super('aabb3Rotate');
 
   static final Matrix4 M = Matrix4.rotationZ(math.pi / 4);
   static final Vector3 P1 = Vector3(10.0, 10.0, 0.0);
@@ -207,7 +207,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 100; i++) {
+    for (var i = 0; i < 100; i++) {
       temp.copyFrom(B1);
       temp.rotate(M);
       temp.copyFrom(B2);
@@ -219,7 +219,7 @@
 }
 
 class Matrix3DeterminantBenchmark extends BenchmarkBase {
-  Matrix3DeterminantBenchmark() : super("Matrix3.determinant");
+  Matrix3DeterminantBenchmark() : super('Matrix3.determinant');
 
   final Matrix3 MX = Matrix3.rotationX(math.pi / 4);
   final Matrix3 MY = Matrix3.rotationY(math.pi / 4);
@@ -231,7 +231,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 800; i++) {
+    for (var i = 0; i < 800; i++) {
       MX.determinant();
       MY.determinant();
       MZ.determinant();
@@ -240,7 +240,7 @@
 }
 
 class Matrix3TransformVector3Benchmark extends BenchmarkBase {
-  Matrix3TransformVector3Benchmark() : super("Matrix3.transform(Vector3)");
+  Matrix3TransformVector3Benchmark() : super('Matrix3.transform(Vector3)');
 
   final Matrix3 MX = Matrix3.rotationX(math.pi / 4);
   final Matrix3 MY = Matrix3.rotationY(math.pi / 4);
@@ -255,7 +255,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 800; i++) {
+    for (var i = 0; i < 800; i++) {
       MX.transform(V1);
       MX.transform(V2);
       MX.transform(V3);
@@ -270,7 +270,7 @@
 }
 
 class Matrix3TransformVector2Benchmark extends BenchmarkBase {
-  Matrix3TransformVector2Benchmark() : super("Matrix3.transform(Vector2)");
+  Matrix3TransformVector2Benchmark() : super('Matrix3.transform(Vector2)');
 
   final Matrix3 MX = Matrix3.rotationX(math.pi / 4);
   final Matrix3 MY = Matrix3.rotationY(math.pi / 4);
@@ -285,7 +285,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 800; i++) {
+    for (var i = 0; i < 800; i++) {
       MX.transform2(V1);
       MX.transform2(V2);
       MX.transform2(V3);
@@ -300,7 +300,7 @@
 }
 
 class Matrix3TransposeMultiplyBenchmark extends BenchmarkBase {
-  Matrix3TransposeMultiplyBenchmark() : super("Matrix3.transposeMultiply");
+  Matrix3TransposeMultiplyBenchmark() : super('Matrix3.transposeMultiply');
 
   final Matrix3 MX = Matrix3.rotationX(math.pi / 4);
   final Matrix3 MY = Matrix3.rotationY(math.pi / 4);
@@ -313,7 +313,7 @@
 
   @override
   void run() {
-    for (int i = 0; i < 100; i++) {
+    for (var i = 0; i < 100; i++) {
       temp.setIdentity();
       temp.transposeMultiply(MX);
       temp.transposeMultiply(MY);
diff --git a/changelog.md b/changelog.md
index 0213cc3..0884bd9 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,6 +1,6 @@
 ## 2.0.9
 
-- Update Dart SDK constraint to `>=2.1.0 <3.0.0`.
+- Update Dart SDK constraint to `>=2.3.0 <3.0.0`.
 - Improve performance of Matrix4.decompose by reusing objects.
 
 ## v 2.0.8 - July 2018
diff --git a/lib/src/vector_math/aabb3.dart b/lib/src/vector_math/aabb3.dart
index 7102e2b..f3f21b1 100644
--- a/lib/src/vector_math/aabb3.dart
+++ b/lib/src/vector_math/aabb3.dart
@@ -341,10 +341,10 @@
   bool intersectsWithSphere(Sphere other) {
     final Vector3 center = other._center;
     final double radius = other.radius;
-    double d = 0.0;
-    double e = 0.0;
+    var d = 0.0;
+    var e = 0.0;
 
-    for (int i = 0; i < 3; ++i) {
+    for (var i = 0; i < 3; ++i) {
       if ((e = center[i] - _min[i]) < 0.0) {
         if (e < -radius) {
           return false;
diff --git a/lib/src/vector_math/colors.dart b/lib/src/vector_math/colors.dart
index 614ad82..bbb14e4 100644
--- a/lib/src/vector_math/colors.dart
+++ b/lib/src/vector_math/colors.dart
@@ -168,7 +168,7 @@
     final double d = max - min;
     final double v = max;
     final double s = max == 0.0 ? 0.0 : d / max;
-    double h = 0.0;
+    var h = 0.0;
 
     if (max != min) {
       if (max == rgbColor.r) {
@@ -223,8 +223,8 @@
     final double max = math.max(math.max(rgbColor.r, rgbColor.g), rgbColor.b);
     final double min = math.min(math.min(rgbColor.r, rgbColor.g), rgbColor.b);
     final double l = (max + min) / 2.0;
-    double h = 0.0;
-    double s = 0.0;
+    var h = 0.0;
+    var s = 0.0;
 
     if (max != min) {
       final double d = max - min;
diff --git a/lib/src/vector_math/matrix2.dart b/lib/src/vector_math/matrix2.dart
index dc61b10..e823b90 100644
--- a/lib/src/vector_math/matrix2.dart
+++ b/lib/src/vector_math/matrix2.dart
@@ -20,7 +20,7 @@
     final double a22 = A.entry(1, 1);
     final double bx = b.x;
     final double by = b.y;
-    double det = a11 * a22 - a12 * a21;
+    var det = a11 * a22 - a12 * a21;
 
     if (det != 0.0) {
       det = 1.0 / det;
@@ -292,7 +292,7 @@
 
   /// Trace of the matrix.
   double trace() {
-    double t = 0.0;
+    var t = 0.0;
     t += _m2storage[0];
     t += _m2storage[3];
     return t;
@@ -300,15 +300,15 @@
 
   /// Returns infinity norm of the matrix. Used for numerical analysis.
   double infinityNorm() {
-    double norm = 0.0;
+    var norm = 0.0;
     {
-      double rowNorm = 0.0;
+      var rowNorm = 0.0;
       rowNorm += _m2storage[0].abs();
       rowNorm += _m2storage[1].abs();
       norm = rowNorm > norm ? rowNorm : norm;
     }
     {
-      double rowNorm = 0.0;
+      var rowNorm = 0.0;
       rowNorm += _m2storage[2].abs();
       rowNorm += _m2storage[3].abs();
       norm = rowNorm > norm ? rowNorm : norm;
diff --git a/lib/src/vector_math/matrix3.dart b/lib/src/vector_math/matrix3.dart
index e695b0e..aacbb73 100644
--- a/lib/src/vector_math/matrix3.dart
+++ b/lib/src/vector_math/matrix3.dart
@@ -20,7 +20,7 @@
     final double a22 = A.entry(1, 1);
     final double bx = b.x - A.storage[6];
     final double by = b.y - A.storage[7];
-    double det = a11 * a22 - a12 * a21;
+    var det = a11 * a22 - a12 * a21;
 
     if (det != 0.0) {
       det = 1.0 / det;
@@ -437,7 +437,7 @@
   /// Returns the trace of the matrix. The trace of a matrix is the sum of
   /// the diagonal entries.
   double trace() {
-    double t = 0.0;
+    var t = 0.0;
     t += _m3storage[0];
     t += _m3storage[4];
     t += _m3storage[8];
@@ -446,23 +446,23 @@
 
   /// Returns infinity norm of the matrix. Used for numerical analysis.
   double infinityNorm() {
-    double norm = 0.0;
+    var norm = 0.0;
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m3storage[0].abs();
       row_norm += _m3storage[1].abs();
       row_norm += _m3storage[2].abs();
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m3storage[3].abs();
       row_norm += _m3storage[4].abs();
       row_norm += _m3storage[5].abs();
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m3storage[6].abs();
       row_norm += _m3storage[7].abs();
       row_norm += _m3storage[8].abs();
diff --git a/lib/src/vector_math/matrix4.dart b/lib/src/vector_math/matrix4.dart
index 776833c..9759d69 100644
--- a/lib/src/vector_math/matrix4.dart
+++ b/lib/src/vector_math/matrix4.dart
@@ -20,7 +20,7 @@
     final double a22 = A.entry(1, 1);
     final double bx = b.x - A._m4storage[8];
     final double by = b.y - A._m4storage[9];
-    double det = a11 * a22 - a12 * a21;
+    var det = a11 * a22 - a12 * a21;
 
     if (det != 0.0) {
       det = 1.0 / det;
@@ -118,7 +118,7 @@
     final double bZ = b.storage[2];
     final double bW = b.storage[3];
 
-    double det =
+    var det =
         b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
 
     if (det != 0.0) {
@@ -1052,7 +1052,7 @@
   /// Returns the trace of the matrix. The trace of a matrix is the sum of the
   /// diagonal entries.
   double trace() {
-    double t = 0.0;
+    var t = 0.0;
     t += _m4storage[0];
     t += _m4storage[5];
     t += _m4storage[10];
@@ -1062,9 +1062,9 @@
 
   /// Returns infinity norm of the matrix. Used for numerical analysis.
   double infinityNorm() {
-    double norm = 0.0;
+    var norm = 0.0;
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[0].abs();
       row_norm += _m4storage[1].abs();
       row_norm += _m4storage[2].abs();
@@ -1072,7 +1072,7 @@
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[4].abs();
       row_norm += _m4storage[5].abs();
       row_norm += _m4storage[6].abs();
@@ -1080,7 +1080,7 @@
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[8].abs();
       row_norm += _m4storage[9].abs();
       row_norm += _m4storage[10].abs();
@@ -1088,7 +1088,7 @@
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[12].abs();
       row_norm += _m4storage[13].abs();
       row_norm += _m4storage[14].abs();
@@ -1775,8 +1775,7 @@
   /// Decomposes this into [translation], [rotation] and [scale] components.
   void decompose(Vector3 translation, Quaternion rotation, Vector3 scale) {
     final Vector3 v = _decomposeV ??= Vector3.zero();
-    double sx =
-        (v..setValues(_m4storage[0], _m4storage[1], _m4storage[2])).length;
+    var sx = (v..setValues(_m4storage[0], _m4storage[1], _m4storage[2])).length;
     final double sy =
         (v..setValues(_m4storage[4], _m4storage[5], _m4storage[6])).length;
     final double sz =
diff --git a/lib/src/vector_math/obb3.dart b/lib/src/vector_math/obb3.dart
index 1d42bfe..e80b345 100644
--- a/lib/src/vector_math/obb3.dart
+++ b/lib/src/vector_math/obb3.dart
@@ -173,7 +173,7 @@
 
     q.setFrom(_center);
 
-    double dist = d.dot(_axis0);
+    var dist = d.dot(_axis0);
     dist = dist.clamp(-_halfExtents.x, _halfExtents.x).toDouble();
     q.addScaled(_axis0, dist);
 
@@ -216,8 +216,8 @@
     // Compute common subexpressions. Add in an epsilon term to
     // counteract arithmetic errors when two edges are parallel and
     // their cross product is (near) null.
-    for (int i = 0; i < 3; i++) {
-      for (int j = 0; j < 3; j++) {
+    for (var i = 0; i < 3; i++) {
+      for (var j = 0; j < 3; j++) {
         _absR.setEntry(i, j, _r.entry(i, j).abs() + epsilon);
       }
     }
@@ -226,7 +226,7 @@
     double rb;
 
     // Test axes L = A0, L = A1, L = A2
-    for (int i = 0; i < 3; i++) {
+    for (var i = 0; i < 3; i++) {
       ra = _halfExtents[i];
       rb = other._halfExtents[0] * _absR.entry(i, 0) +
           other._halfExtents[1] * _absR.entry(i, 1) +
@@ -238,7 +238,7 @@
     }
 
     // Test axes L = B0, L = B1, L = B2
-    for (int i = 0; i < 3; i++) {
+    for (var i = 0; i < 3; i++) {
       ra = _halfExtents[0] * _absR.entry(0, i) +
           _halfExtents[1] * _absR.entry(1, i) +
           _halfExtents[2] * _absR.entry(2, i);
diff --git a/lib/src/vector_math/opengl.dart b/lib/src/vector_math/opengl.dart
index 6d93fb1..d5565e8 100644
--- a/lib/src/vector_math/opengl.dart
+++ b/lib/src/vector_math/opengl.dart
@@ -264,7 +264,7 @@
   final Vector4 v = Vector4(planeNormal.storage[0], planeNormal.storage[1],
       planeNormal.storage[2], 0.0);
   final Matrix4 outer = Matrix4.outer(v, v);
-  Matrix4 r = Matrix4.zero();
+  var r = Matrix4.zero();
   r = r - outer;
   final Vector3 scaledNormal =
       planeNormal.scaled(dot3(planePoint, planeNormal));
@@ -280,7 +280,7 @@
   final Vector4 v = Vector4(planeNormal.storage[0], planeNormal.storage[1],
       planeNormal.storage[2], 0.0);
   final Matrix4 outer = Matrix4.outer(v, v)..scale(2.0);
-  Matrix4 r = Matrix4.zero();
+  var r = Matrix4.zero();
   r = r - outer;
   final double scale = 2.0 * planePoint.dot(planeNormal);
   final Vector3 scaledNormal = planeNormal.scaled(scale);
diff --git a/lib/src/vector_math/quaternion.dart b/lib/src/vector_math/quaternion.dart
index 79e6b53..cd942d6 100644
--- a/lib/src/vector_math/quaternion.dart
+++ b/lib/src/vector_math/quaternion.dart
@@ -126,7 +126,7 @@
     final Float32List rotationMatrixStorage = rotationMatrix.storage;
     final double trace = rotationMatrix.trace();
     if (trace > 0.0) {
-      double s = math.sqrt(trace + 1.0);
+      var s = math.sqrt(trace + 1.0);
       _qStorage[3] = s * 0.5;
       s = 0.5 / s;
       _qStorage[0] = (rotationMatrixStorage[5] - rotationMatrixStorage[7]) * s;
@@ -138,7 +138,7 @@
           : (rotationMatrixStorage[0] < rotationMatrixStorage[8] ? 2 : 0);
       final int j = (i + 1) % 3;
       final int k = (i + 2) % 3;
-      double s = math.sqrt(rotationMatrixStorage[rotationMatrix.index(i, i)] -
+      var s = math.sqrt(rotationMatrixStorage[rotationMatrix.index(i, i)] -
           rotationMatrixStorage[rotationMatrix.index(j, j)] -
           rotationMatrixStorage[rotationMatrix.index(k, k)] +
           1.0);
@@ -161,8 +161,8 @@
     final Vector3 v2 = b.normalized();
 
     final double c = v1.dot(v2);
-    double angle = math.acos(c);
-    Vector3 axis = v1.cross(v2);
+    var angle = math.acos(c);
+    var axis = v1.cross(v2);
 
     if ((1.0 + c).abs() < 0.0005) {
       // c \approx -1 indicates 180 degree rotation
diff --git a/lib/src/vector_math/ray.dart b/lib/src/vector_math/ray.dart
index d4ee7da..b91394a 100644
--- a/lib/src/vector_math/ray.dart
+++ b/lib/src/vector_math/ray.dart
@@ -128,9 +128,9 @@
     const double epsilon = 10e-6;
 
     // First triangle
-    Vector3 point0 = other._point0;
-    Vector3 point1 = other._point1;
-    Vector3 point2 = other._point2;
+    var point0 = other._point0;
+    var point1 = other._point1;
+    var point2 = other._point2;
 
     _e1
       ..setFrom(point1)
@@ -204,17 +204,17 @@
     final Vector3 otherMin = other.min;
     final Vector3 otherMax = other.max;
 
-    double tNear = -double.maxFinite;
-    double tFar = double.maxFinite;
+    var tNear = -double.maxFinite;
+    var tFar = double.maxFinite;
 
-    for (int i = 0; i < 3; ++i) {
+    for (var i = 0; i < 3; ++i) {
       if (_direction[i] == 0.0) {
         if (_origin[i] < otherMin[i] || _origin[i] > otherMax[i]) {
           return null;
         }
       } else {
-        double t1 = (otherMin[i] - _origin[i]) / _direction[i];
-        double t2 = (otherMax[i] - _origin[i]) / _direction[i];
+        var t1 = (otherMin[i] - _origin[i]) / _direction[i];
+        var t2 = (otherMax[i] - _origin[i]) / _direction[i];
 
         if (t1 > t2) {
           final double temp = t1;
diff --git a/lib/src/vector_math/third_party/noise.dart b/lib/src/vector_math/third_party/noise.dart
index 101d183..1931ae1 100644
--- a/lib/src/vector_math/third_party/noise.dart
+++ b/lib/src/vector_math/third_party/noise.dart
@@ -146,7 +146,7 @@
     final int gi1 = _permMod12[ii + i1 + _perm[jj + j1]];
     final int gi2 = _permMod12[ii + 1 + _perm[jj + 1]];
     // Calculate the contribution from the three corners
-    double t0 = 0.5 - x0 * x0 - y0 * y0;
+    var t0 = 0.5 - x0 * x0 - y0 * y0;
     if (t0 < 0) {
       n0 = 0.0;
     } else {
@@ -155,14 +155,14 @@
           t0 *
           _dot2(_grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
     }
-    double t1 = 0.5 - x1 * x1 - y1 * y1;
+    var t1 = 0.5 - x1 * x1 - y1 * y1;
     if (t1 < 0) {
       n1 = 0.0;
     } else {
       t1 *= t1;
       n1 = t1 * t1 * _dot2(_grad3[gi1], x1, y1);
     }
-    double t2 = 0.5 - x2 * x2 - y2 * y2;
+    var t2 = 0.5 - x2 * x2 - y2 * y2;
     if (t2 < 0) {
       n2 = 0.0;
     } else {
@@ -271,28 +271,28 @@
     final int gi2 = _permMod12[ii + i2 + _perm[jj + j2 + _perm[kk + k2]]];
     final int gi3 = _permMod12[ii + 1 + _perm[jj + 1 + _perm[kk + 1]]];
     // Calculate the contribution from the four corners
-    double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
+    var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
     if (t0 < 0) {
       n0 = 0.0;
     } else {
       t0 *= t0;
       n0 = t0 * t0 * _dot3(_grad3[gi0], x0, y0, z0);
     }
-    double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
+    var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
     if (t1 < 0) {
       n1 = 0.0;
     } else {
       t1 *= t1;
       n1 = t1 * t1 * _dot3(_grad3[gi1], x1, y1, z1);
     }
-    double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
+    var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
     if (t2 < 0) {
       n2 = 0.0;
     } else {
       t2 *= t2;
       n2 = t2 * t2 * _dot3(_grad3[gi2], x2, y2, z2);
     }
-    double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
+    var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
     if (t3 < 0) {
       n3 = 0.0;
     } else {
@@ -327,10 +327,10 @@
     // determine the magnitude ordering of x0, y0, z0 and w0.
     // Six pair-wise comparisons are performed between each possible pair
     // of the four coordinates, and the results are used to rank the numbers.
-    int rankx = 0;
-    int ranky = 0;
-    int rankz = 0;
-    int rankw = 0;
+    var rankx = 0;
+    var ranky = 0;
+    var rankz = 0;
+    var rankw = 0;
     if (x0 > y0) {
       rankx++;
     } else {
@@ -419,35 +419,35 @@
     final int gi4 =
         _perm[ii + 1 + _perm[jj + 1 + _perm[kk + 1 + _perm[ll + 1]]]] % 32;
     // Calculate the contribution from the five corners
-    double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
+    var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
     if (t0 < 0) {
       n0 = 0.0;
     } else {
       t0 *= t0;
       n0 = t0 * t0 * _dot4(_grad4[gi0], x0, y0, z0, w0);
     }
-    double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
+    var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
     if (t1 < 0) {
       n1 = 0.0;
     } else {
       t1 *= t1;
       n1 = t1 * t1 * _dot4(_grad4[gi1], x1, y1, z1, w1);
     }
-    double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
+    var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
     if (t2 < 0) {
       n2 = 0.0;
     } else {
       t2 *= t2;
       n2 = t2 * t2 * _dot4(_grad4[gi2], x2, y2, z2, w2);
     }
-    double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
+    var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
     if (t3 < 0) {
       n3 = 0.0;
     } else {
       t3 *= t3;
       n3 = t3 * t3 * _dot4(_grad4[gi3], x3, y3, z3, w3);
     }
-    double t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
+    var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
     if (t4 < 0) {
       n4 = 0.0;
     } else {
diff --git a/lib/src/vector_math/vector2.dart b/lib/src/vector_math/vector2.dart
index a0df4c8..3eda468 100644
--- a/lib/src/vector_math/vector2.dart
+++ b/lib/src/vector_math/vector2.dart
@@ -133,7 +133,7 @@
     if (value == 0.0) {
       setZero();
     } else {
-      double l = length;
+      var l = length;
       if (l == 0.0) {
         return;
       }
@@ -273,7 +273,7 @@
 
   /// True if any component is infinite.
   bool get isInfinite {
-    bool is_infinite = false;
+    var is_infinite = false;
     is_infinite = is_infinite || _v2storage[0].isInfinite;
     is_infinite = is_infinite || _v2storage[1].isInfinite;
     return is_infinite;
@@ -281,7 +281,7 @@
 
   /// True if any component is NaN.
   bool get isNaN {
-    bool is_nan = false;
+    var is_nan = false;
     is_nan = is_nan || _v2storage[0].isNaN;
     is_nan = is_nan || _v2storage[1].isNaN;
     return is_nan;
diff --git a/lib/src/vector_math/vector3.dart b/lib/src/vector_math/vector3.dart
index 89b50e1..2f8811e 100644
--- a/lib/src/vector_math/vector3.dart
+++ b/lib/src/vector_math/vector3.dart
@@ -142,7 +142,7 @@
     if (value == 0.0) {
       setZero();
     } else {
-      double l = length;
+      var l = length;
       if (l == 0.0) {
         return;
       }
@@ -394,7 +394,7 @@
 
   /// True if any component is infinite.
   bool get isInfinite {
-    bool is_infinite = false;
+    var is_infinite = false;
     is_infinite = is_infinite || _v3storage[0].isInfinite;
     is_infinite = is_infinite || _v3storage[1].isInfinite;
     is_infinite = is_infinite || _v3storage[2].isInfinite;
@@ -403,7 +403,7 @@
 
   /// True if any component is NaN.
   bool get isNaN {
-    bool isNan = false;
+    var isNan = false;
     isNan = isNan || _v3storage[0].isNaN;
     isNan = isNan || _v3storage[1].isNaN;
     isNan = isNan || _v3storage[2].isNaN;
diff --git a/lib/src/vector_math/vector4.dart b/lib/src/vector_math/vector4.dart
index d870e38..3075296 100644
--- a/lib/src/vector_math/vector4.dart
+++ b/lib/src/vector_math/vector4.dart
@@ -163,7 +163,7 @@
     if (value == 0.0) {
       setZero();
     } else {
-      double l = length;
+      var l = length;
       if (l == 0.0) {
         return;
       }
@@ -280,7 +280,7 @@
 
   /// True if any component is infinite.
   bool get isInfinite {
-    bool is_infinite = false;
+    var is_infinite = false;
     is_infinite = is_infinite || _v4storage[0].isInfinite;
     is_infinite = is_infinite || _v4storage[1].isInfinite;
     is_infinite = is_infinite || _v4storage[2].isInfinite;
@@ -290,7 +290,7 @@
 
   /// True if any component is NaN.
   bool get isNaN {
-    bool is_nan = false;
+    var is_nan = false;
     is_nan = is_nan || _v4storage[0].isNaN;
     is_nan = is_nan || _v4storage[1].isNaN;
     is_nan = is_nan || _v4storage[2].isNaN;
diff --git a/lib/src/vector_math_64/aabb3.dart b/lib/src/vector_math_64/aabb3.dart
index ab5cc5c..cc8b10d 100644
--- a/lib/src/vector_math_64/aabb3.dart
+++ b/lib/src/vector_math_64/aabb3.dart
@@ -341,10 +341,10 @@
   bool intersectsWithSphere(Sphere other) {
     final Vector3 center = other._center;
     final double radius = other.radius;
-    double d = 0.0;
-    double e = 0.0;
+    var d = 0.0;
+    var e = 0.0;
 
-    for (int i = 0; i < 3; ++i) {
+    for (var i = 0; i < 3; ++i) {
       if ((e = center[i] - _min[i]) < 0.0) {
         if (e < -radius) {
           return false;
diff --git a/lib/src/vector_math_64/colors.dart b/lib/src/vector_math_64/colors.dart
index 1653de0..38cfc12 100644
--- a/lib/src/vector_math_64/colors.dart
+++ b/lib/src/vector_math_64/colors.dart
@@ -168,7 +168,7 @@
     final double d = max - min;
     final double v = max;
     final double s = max == 0.0 ? 0.0 : d / max;
-    double h = 0.0;
+    var h = 0.0;
 
     if (max != min) {
       if (max == rgbColor.r) {
@@ -223,8 +223,8 @@
     final double max = math.max(math.max(rgbColor.r, rgbColor.g), rgbColor.b);
     final double min = math.min(math.min(rgbColor.r, rgbColor.g), rgbColor.b);
     final double l = (max + min) / 2.0;
-    double h = 0.0;
-    double s = 0.0;
+    var h = 0.0;
+    var s = 0.0;
 
     if (max != min) {
       final double d = max - min;
diff --git a/lib/src/vector_math_64/matrix2.dart b/lib/src/vector_math_64/matrix2.dart
index e727472..9d8c785 100644
--- a/lib/src/vector_math_64/matrix2.dart
+++ b/lib/src/vector_math_64/matrix2.dart
@@ -20,7 +20,7 @@
     final double a22 = A.entry(1, 1);
     final double bx = b.x;
     final double by = b.y;
-    double det = a11 * a22 - a12 * a21;
+    var det = a11 * a22 - a12 * a21;
 
     if (det != 0.0) {
       det = 1.0 / det;
@@ -292,7 +292,7 @@
 
   /// Trace of the matrix.
   double trace() {
-    double t = 0.0;
+    var t = 0.0;
     t += _m2storage[0];
     t += _m2storage[3];
     return t;
@@ -300,15 +300,15 @@
 
   /// Returns infinity norm of the matrix. Used for numerical analysis.
   double infinityNorm() {
-    double norm = 0.0;
+    var norm = 0.0;
     {
-      double rowNorm = 0.0;
+      var rowNorm = 0.0;
       rowNorm += _m2storage[0].abs();
       rowNorm += _m2storage[1].abs();
       norm = rowNorm > norm ? rowNorm : norm;
     }
     {
-      double rowNorm = 0.0;
+      var rowNorm = 0.0;
       rowNorm += _m2storage[2].abs();
       rowNorm += _m2storage[3].abs();
       norm = rowNorm > norm ? rowNorm : norm;
diff --git a/lib/src/vector_math_64/matrix3.dart b/lib/src/vector_math_64/matrix3.dart
index e490490..117dc8b 100644
--- a/lib/src/vector_math_64/matrix3.dart
+++ b/lib/src/vector_math_64/matrix3.dart
@@ -20,7 +20,7 @@
     final double a22 = A.entry(1, 1);
     final double bx = b.x - A.storage[6];
     final double by = b.y - A.storage[7];
-    double det = a11 * a22 - a12 * a21;
+    var det = a11 * a22 - a12 * a21;
 
     if (det != 0.0) {
       det = 1.0 / det;
@@ -437,7 +437,7 @@
   /// Returns the trace of the matrix. The trace of a matrix is the sum of
   /// the diagonal entries.
   double trace() {
-    double t = 0.0;
+    var t = 0.0;
     t += _m3storage[0];
     t += _m3storage[4];
     t += _m3storage[8];
@@ -446,23 +446,23 @@
 
   /// Returns infinity norm of the matrix. Used for numerical analysis.
   double infinityNorm() {
-    double norm = 0.0;
+    var norm = 0.0;
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m3storage[0].abs();
       row_norm += _m3storage[1].abs();
       row_norm += _m3storage[2].abs();
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m3storage[3].abs();
       row_norm += _m3storage[4].abs();
       row_norm += _m3storage[5].abs();
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m3storage[6].abs();
       row_norm += _m3storage[7].abs();
       row_norm += _m3storage[8].abs();
diff --git a/lib/src/vector_math_64/matrix4.dart b/lib/src/vector_math_64/matrix4.dart
index 35f98ff..838d6d9 100644
--- a/lib/src/vector_math_64/matrix4.dart
+++ b/lib/src/vector_math_64/matrix4.dart
@@ -20,7 +20,7 @@
     final double a22 = A.entry(1, 1);
     final double bx = b.x - A._m4storage[8];
     final double by = b.y - A._m4storage[9];
-    double det = a11 * a22 - a12 * a21;
+    var det = a11 * a22 - a12 * a21;
 
     if (det != 0.0) {
       det = 1.0 / det;
@@ -118,7 +118,7 @@
     final double bZ = b.storage[2];
     final double bW = b.storage[3];
 
-    double det =
+    var det =
         b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
 
     if (det != 0.0) {
@@ -1052,7 +1052,7 @@
   /// Returns the trace of the matrix. The trace of a matrix is the sum of the
   /// diagonal entries.
   double trace() {
-    double t = 0.0;
+    var t = 0.0;
     t += _m4storage[0];
     t += _m4storage[5];
     t += _m4storage[10];
@@ -1062,9 +1062,9 @@
 
   /// Returns infinity norm of the matrix. Used for numerical analysis.
   double infinityNorm() {
-    double norm = 0.0;
+    var norm = 0.0;
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[0].abs();
       row_norm += _m4storage[1].abs();
       row_norm += _m4storage[2].abs();
@@ -1072,7 +1072,7 @@
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[4].abs();
       row_norm += _m4storage[5].abs();
       row_norm += _m4storage[6].abs();
@@ -1080,7 +1080,7 @@
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[8].abs();
       row_norm += _m4storage[9].abs();
       row_norm += _m4storage[10].abs();
@@ -1088,7 +1088,7 @@
       norm = row_norm > norm ? row_norm : norm;
     }
     {
-      double row_norm = 0.0;
+      var row_norm = 0.0;
       row_norm += _m4storage[12].abs();
       row_norm += _m4storage[13].abs();
       row_norm += _m4storage[14].abs();
@@ -1775,8 +1775,7 @@
   /// Decomposes this into [translation], [rotation] and [scale] components.
   void decompose(Vector3 translation, Quaternion rotation, Vector3 scale) {
     final Vector3 v = _decomposeV ??= Vector3.zero();
-    double sx =
-        (v..setValues(_m4storage[0], _m4storage[1], _m4storage[2])).length;
+    var sx = (v..setValues(_m4storage[0], _m4storage[1], _m4storage[2])).length;
     final double sy =
         (v..setValues(_m4storage[4], _m4storage[5], _m4storage[6])).length;
     final double sz =
diff --git a/lib/src/vector_math_64/obb3.dart b/lib/src/vector_math_64/obb3.dart
index 49059dc..3cb5eca 100644
--- a/lib/src/vector_math_64/obb3.dart
+++ b/lib/src/vector_math_64/obb3.dart
@@ -173,7 +173,7 @@
 
     q.setFrom(_center);
 
-    double dist = d.dot(_axis0);
+    var dist = d.dot(_axis0);
     dist = dist.clamp(-_halfExtents.x, _halfExtents.x).toDouble();
     q.addScaled(_axis0, dist);
 
@@ -216,8 +216,8 @@
     // Compute common subexpressions. Add in an epsilon term to
     // counteract arithmetic errors when two edges are parallel and
     // their cross product is (near) null.
-    for (int i = 0; i < 3; i++) {
-      for (int j = 0; j < 3; j++) {
+    for (var i = 0; i < 3; i++) {
+      for (var j = 0; j < 3; j++) {
         _absR.setEntry(i, j, _r.entry(i, j).abs() + epsilon);
       }
     }
@@ -226,7 +226,7 @@
     double rb;
 
     // Test axes L = A0, L = A1, L = A2
-    for (int i = 0; i < 3; i++) {
+    for (var i = 0; i < 3; i++) {
       ra = _halfExtents[i];
       rb = other._halfExtents[0] * _absR.entry(i, 0) +
           other._halfExtents[1] * _absR.entry(i, 1) +
@@ -238,7 +238,7 @@
     }
 
     // Test axes L = B0, L = B1, L = B2
-    for (int i = 0; i < 3; i++) {
+    for (var i = 0; i < 3; i++) {
       ra = _halfExtents[0] * _absR.entry(0, i) +
           _halfExtents[1] * _absR.entry(1, i) +
           _halfExtents[2] * _absR.entry(2, i);
diff --git a/lib/src/vector_math_64/opengl.dart b/lib/src/vector_math_64/opengl.dart
index c34e5ed..b9160a0 100644
--- a/lib/src/vector_math_64/opengl.dart
+++ b/lib/src/vector_math_64/opengl.dart
@@ -264,7 +264,7 @@
   final Vector4 v = Vector4(planeNormal.storage[0], planeNormal.storage[1],
       planeNormal.storage[2], 0.0);
   final Matrix4 outer = Matrix4.outer(v, v);
-  Matrix4 r = Matrix4.zero();
+  var r = Matrix4.zero();
   r = r - outer;
   final Vector3 scaledNormal =
       planeNormal.scaled(dot3(planePoint, planeNormal));
@@ -280,7 +280,7 @@
   final Vector4 v = Vector4(planeNormal.storage[0], planeNormal.storage[1],
       planeNormal.storage[2], 0.0);
   final Matrix4 outer = Matrix4.outer(v, v)..scale(2.0);
-  Matrix4 r = Matrix4.zero();
+  var r = Matrix4.zero();
   r = r - outer;
   final double scale = 2.0 * planePoint.dot(planeNormal);
   final Vector3 scaledNormal = planeNormal.scaled(scale);
diff --git a/lib/src/vector_math_64/quaternion.dart b/lib/src/vector_math_64/quaternion.dart
index 85da6ec..d6508e6 100644
--- a/lib/src/vector_math_64/quaternion.dart
+++ b/lib/src/vector_math_64/quaternion.dart
@@ -126,7 +126,7 @@
     final Float64List rotationMatrixStorage = rotationMatrix.storage;
     final double trace = rotationMatrix.trace();
     if (trace > 0.0) {
-      double s = math.sqrt(trace + 1.0);
+      var s = math.sqrt(trace + 1.0);
       _qStorage[3] = s * 0.5;
       s = 0.5 / s;
       _qStorage[0] = (rotationMatrixStorage[5] - rotationMatrixStorage[7]) * s;
@@ -138,7 +138,7 @@
           : (rotationMatrixStorage[0] < rotationMatrixStorage[8] ? 2 : 0);
       final int j = (i + 1) % 3;
       final int k = (i + 2) % 3;
-      double s = math.sqrt(rotationMatrixStorage[rotationMatrix.index(i, i)] -
+      var s = math.sqrt(rotationMatrixStorage[rotationMatrix.index(i, i)] -
           rotationMatrixStorage[rotationMatrix.index(j, j)] -
           rotationMatrixStorage[rotationMatrix.index(k, k)] +
           1.0);
@@ -161,8 +161,8 @@
     final Vector3 v2 = b.normalized();
 
     final double c = v1.dot(v2);
-    double angle = math.acos(c);
-    Vector3 axis = v1.cross(v2);
+    var angle = math.acos(c);
+    var axis = v1.cross(v2);
 
     if ((1.0 + c).abs() < 0.0005) {
       // c \approx -1 indicates 180 degree rotation
diff --git a/lib/src/vector_math_64/ray.dart b/lib/src/vector_math_64/ray.dart
index 7148275..26fd754 100644
--- a/lib/src/vector_math_64/ray.dart
+++ b/lib/src/vector_math_64/ray.dart
@@ -128,9 +128,9 @@
     const double epsilon = 10e-6;
 
     // First triangle
-    Vector3 point0 = other._point0;
-    Vector3 point1 = other._point1;
-    Vector3 point2 = other._point2;
+    var point0 = other._point0;
+    var point1 = other._point1;
+    var point2 = other._point2;
 
     _e1
       ..setFrom(point1)
@@ -204,17 +204,17 @@
     final Vector3 otherMin = other.min;
     final Vector3 otherMax = other.max;
 
-    double tNear = -double.maxFinite;
-    double tFar = double.maxFinite;
+    var tNear = -double.maxFinite;
+    var tFar = double.maxFinite;
 
-    for (int i = 0; i < 3; ++i) {
+    for (var i = 0; i < 3; ++i) {
       if (_direction[i] == 0.0) {
         if (_origin[i] < otherMin[i] || _origin[i] > otherMax[i]) {
           return null;
         }
       } else {
-        double t1 = (otherMin[i] - _origin[i]) / _direction[i];
-        double t2 = (otherMax[i] - _origin[i]) / _direction[i];
+        var t1 = (otherMin[i] - _origin[i]) / _direction[i];
+        var t2 = (otherMax[i] - _origin[i]) / _direction[i];
 
         if (t1 > t2) {
           final double temp = t1;
diff --git a/lib/src/vector_math_64/third_party/noise.dart b/lib/src/vector_math_64/third_party/noise.dart
index 98cd4ab..53bd877 100644
--- a/lib/src/vector_math_64/third_party/noise.dart
+++ b/lib/src/vector_math_64/third_party/noise.dart
@@ -146,7 +146,7 @@
     final int gi1 = _permMod12[ii + i1 + _perm[jj + j1]];
     final int gi2 = _permMod12[ii + 1 + _perm[jj + 1]];
     // Calculate the contribution from the three corners
-    double t0 = 0.5 - x0 * x0 - y0 * y0;
+    var t0 = 0.5 - x0 * x0 - y0 * y0;
     if (t0 < 0) {
       n0 = 0.0;
     } else {
@@ -155,14 +155,14 @@
           t0 *
           _dot2(_grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
     }
-    double t1 = 0.5 - x1 * x1 - y1 * y1;
+    var t1 = 0.5 - x1 * x1 - y1 * y1;
     if (t1 < 0) {
       n1 = 0.0;
     } else {
       t1 *= t1;
       n1 = t1 * t1 * _dot2(_grad3[gi1], x1, y1);
     }
-    double t2 = 0.5 - x2 * x2 - y2 * y2;
+    var t2 = 0.5 - x2 * x2 - y2 * y2;
     if (t2 < 0) {
       n2 = 0.0;
     } else {
@@ -271,28 +271,28 @@
     final int gi2 = _permMod12[ii + i2 + _perm[jj + j2 + _perm[kk + k2]]];
     final int gi3 = _permMod12[ii + 1 + _perm[jj + 1 + _perm[kk + 1]]];
     // Calculate the contribution from the four corners
-    double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
+    var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
     if (t0 < 0) {
       n0 = 0.0;
     } else {
       t0 *= t0;
       n0 = t0 * t0 * _dot3(_grad3[gi0], x0, y0, z0);
     }
-    double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
+    var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
     if (t1 < 0) {
       n1 = 0.0;
     } else {
       t1 *= t1;
       n1 = t1 * t1 * _dot3(_grad3[gi1], x1, y1, z1);
     }
-    double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
+    var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
     if (t2 < 0) {
       n2 = 0.0;
     } else {
       t2 *= t2;
       n2 = t2 * t2 * _dot3(_grad3[gi2], x2, y2, z2);
     }
-    double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
+    var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
     if (t3 < 0) {
       n3 = 0.0;
     } else {
@@ -327,10 +327,10 @@
     // determine the magnitude ordering of x0, y0, z0 and w0.
     // Six pair-wise comparisons are performed between each possible pair
     // of the four coordinates, and the results are used to rank the numbers.
-    int rankx = 0;
-    int ranky = 0;
-    int rankz = 0;
-    int rankw = 0;
+    var rankx = 0;
+    var ranky = 0;
+    var rankz = 0;
+    var rankw = 0;
     if (x0 > y0) {
       rankx++;
     } else {
@@ -419,35 +419,35 @@
     final int gi4 =
         _perm[ii + 1 + _perm[jj + 1 + _perm[kk + 1 + _perm[ll + 1]]]] % 32;
     // Calculate the contribution from the five corners
-    double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
+    var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
     if (t0 < 0) {
       n0 = 0.0;
     } else {
       t0 *= t0;
       n0 = t0 * t0 * _dot4(_grad4[gi0], x0, y0, z0, w0);
     }
-    double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
+    var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
     if (t1 < 0) {
       n1 = 0.0;
     } else {
       t1 *= t1;
       n1 = t1 * t1 * _dot4(_grad4[gi1], x1, y1, z1, w1);
     }
-    double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
+    var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
     if (t2 < 0) {
       n2 = 0.0;
     } else {
       t2 *= t2;
       n2 = t2 * t2 * _dot4(_grad4[gi2], x2, y2, z2, w2);
     }
-    double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
+    var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
     if (t3 < 0) {
       n3 = 0.0;
     } else {
       t3 *= t3;
       n3 = t3 * t3 * _dot4(_grad4[gi3], x3, y3, z3, w3);
     }
-    double t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
+    var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
     if (t4 < 0) {
       n4 = 0.0;
     } else {
diff --git a/lib/src/vector_math_64/vector2.dart b/lib/src/vector_math_64/vector2.dart
index 1dc2161..06aeb30 100644
--- a/lib/src/vector_math_64/vector2.dart
+++ b/lib/src/vector_math_64/vector2.dart
@@ -133,7 +133,7 @@
     if (value == 0.0) {
       setZero();
     } else {
-      double l = length;
+      var l = length;
       if (l == 0.0) {
         return;
       }
@@ -273,7 +273,7 @@
 
   /// True if any component is infinite.
   bool get isInfinite {
-    bool is_infinite = false;
+    var is_infinite = false;
     is_infinite = is_infinite || _v2storage[0].isInfinite;
     is_infinite = is_infinite || _v2storage[1].isInfinite;
     return is_infinite;
@@ -281,7 +281,7 @@
 
   /// True if any component is NaN.
   bool get isNaN {
-    bool is_nan = false;
+    var is_nan = false;
     is_nan = is_nan || _v2storage[0].isNaN;
     is_nan = is_nan || _v2storage[1].isNaN;
     return is_nan;
diff --git a/lib/src/vector_math_64/vector3.dart b/lib/src/vector_math_64/vector3.dart
index 649acd1..b341a51 100644
--- a/lib/src/vector_math_64/vector3.dart
+++ b/lib/src/vector_math_64/vector3.dart
@@ -142,7 +142,7 @@
     if (value == 0.0) {
       setZero();
     } else {
-      double l = length;
+      var l = length;
       if (l == 0.0) {
         return;
       }
@@ -394,7 +394,7 @@
 
   /// True if any component is infinite.
   bool get isInfinite {
-    bool is_infinite = false;
+    var is_infinite = false;
     is_infinite = is_infinite || _v3storage[0].isInfinite;
     is_infinite = is_infinite || _v3storage[1].isInfinite;
     is_infinite = is_infinite || _v3storage[2].isInfinite;
@@ -403,7 +403,7 @@
 
   /// True if any component is NaN.
   bool get isNaN {
-    bool isNan = false;
+    var isNan = false;
     isNan = isNan || _v3storage[0].isNaN;
     isNan = isNan || _v3storage[1].isNaN;
     isNan = isNan || _v3storage[2].isNaN;
diff --git a/lib/src/vector_math_64/vector4.dart b/lib/src/vector_math_64/vector4.dart
index 38ba021..9514983 100644
--- a/lib/src/vector_math_64/vector4.dart
+++ b/lib/src/vector_math_64/vector4.dart
@@ -163,7 +163,7 @@
     if (value == 0.0) {
       setZero();
     } else {
-      double l = length;
+      var l = length;
       if (l == 0.0) {
         return;
       }
@@ -280,7 +280,7 @@
 
   /// True if any component is infinite.
   bool get isInfinite {
-    bool is_infinite = false;
+    var is_infinite = false;
     is_infinite = is_infinite || _v4storage[0].isInfinite;
     is_infinite = is_infinite || _v4storage[1].isInfinite;
     is_infinite = is_infinite || _v4storage[2].isInfinite;
@@ -290,7 +290,7 @@
 
   /// True if any component is NaN.
   bool get isNaN {
-    bool is_nan = false;
+    var is_nan = false;
     is_nan = is_nan || _v4storage[0].isNaN;
     is_nan = is_nan || _v4storage[1].isNaN;
     is_nan = is_nan || _v4storage[2].isNaN;
diff --git a/lib/src/vector_math_geometry/filters/barycentric_filter.dart b/lib/src/vector_math_geometry/filters/barycentric_filter.dart
index 7253e3b..689becd 100644
--- a/lib/src/vector_math_geometry/filters/barycentric_filter.dart
+++ b/lib/src/vector_math_geometry/filters/barycentric_filter.dart
@@ -31,7 +31,7 @@
 
     final List<VectorList<Vector>> srcAttribs = <VectorList<Vector>>[];
     final List<VectorList<Vector>> destAttribs = <VectorList<Vector>>[];
-    for (VertexAttrib attrib in mesh.attribs) {
+    for (var attrib in mesh.attribs) {
       if (attrib.name == 'BARYCENTRIC') {
         continue;
       }
@@ -46,7 +46,7 @@
 
     int i0, i1, i2;
 
-    for (int i = 0; i < output.length; i += 3) {
+    for (var i = 0; i < output.length; i += 3) {
       if (mesh.indices != null) {
         i0 = mesh.indices[i];
         i1 = mesh.indices[i + 1];
@@ -62,7 +62,7 @@
       barycentricCoords[i + 2] = b2;
 
       // Copy the remaining attributes over
-      for (int j = 0; j < srcAttribs.length; ++j) {
+      for (var j = 0; j < srcAttribs.length; ++j) {
         destAttribs[j][i] = srcAttribs[j][i0];
         destAttribs[j][i + 1] = srcAttribs[j][i1];
         destAttribs[j][i + 2] = srcAttribs[j][i2];
diff --git a/lib/src/vector_math_geometry/filters/color_filter.dart b/lib/src/vector_math_geometry/filters/color_filter.dart
index 7822356..823c18b 100644
--- a/lib/src/vector_math_geometry/filters/color_filter.dart
+++ b/lib/src/vector_math_geometry/filters/color_filter.dart
@@ -17,8 +17,7 @@
   MeshGeometry filter(MeshGeometry mesh) {
     MeshGeometry output;
     if (mesh.getAttrib('COLOR') == null) {
-      final List<VertexAttrib> attributes = <VertexAttrib>[]
-        ..addAll(mesh.attribs)
+      final attributes = <VertexAttrib>[...mesh.attribs]
         ..add(VertexAttrib('COLOR', 4, 'float'));
       output = MeshGeometry.resetAttribs(mesh, attributes);
     } else {
@@ -27,7 +26,7 @@
 
     final VectorList<Vector> colors = output.getViewForAttrib('COLOR');
     if (colors is Vector4List) {
-      for (int i = 0; i < colors.length; ++i) {
+      for (var i = 0; i < colors.length; ++i) {
         colors[i] = color;
       }
       return output;
diff --git a/lib/src/vector_math_geometry/filters/flat_shade_filter.dart b/lib/src/vector_math_geometry/filters/flat_shade_filter.dart
index afa4def..2dabe78 100644
--- a/lib/src/vector_math_geometry/filters/flat_shade_filter.dart
+++ b/lib/src/vector_math_geometry/filters/flat_shade_filter.dart
@@ -39,7 +39,7 @@
 
     final List<VectorList<Vector>> srcAttribs = <VectorList<Vector>>[];
     final List<VectorList<Vector>> destAttribs = <VectorList<Vector>>[];
-    for (VertexAttrib attrib in mesh.attribs) {
+    for (var attrib in mesh.attribs) {
       if (attrib.name == 'POSITION' || attrib.name == 'NORMAL') {
         continue;
       }
@@ -48,7 +48,7 @@
       destAttribs.add(output.getViewForAttrib(attrib.name));
     }
 
-    for (int i = 0; i < output.length; i += 3) {
+    for (var i = 0; i < output.length; i += 3) {
       final int i0 = mesh.indices[i];
       final int i1 = mesh.indices[i + 1];
       final int i2 = mesh.indices[i + 2];
@@ -69,7 +69,7 @@
       normals[i + 2] = p0;
 
       // Copy the remaining attributes over
-      for (int j = 0; j < srcAttribs.length; ++j) {
+      for (var j = 0; j < srcAttribs.length; ++j) {
         destAttribs[j][i] = srcAttribs[j][i0];
         destAttribs[j][i + 1] = srcAttribs[j][i1];
         destAttribs[j][i + 2] = srcAttribs[j][i2];
diff --git a/lib/src/vector_math_geometry/filters/invert_filter.dart b/lib/src/vector_math_geometry/filters/invert_filter.dart
index 8d2e6bc..1e63f6c 100644
--- a/lib/src/vector_math_geometry/filters/invert_filter.dart
+++ b/lib/src/vector_math_geometry/filters/invert_filter.dart
@@ -12,7 +12,7 @@
     // to return a new geometry?
 
     // Swap all the triangle indices
-    for (int i = 0; i < mesh.indices.length; i += 3) {
+    for (var i = 0; i < mesh.indices.length; i += 3) {
       final int tmp = mesh.indices[i];
       mesh.indices[i] = mesh.indices[i + 2];
       mesh.indices[i + 2] = tmp;
@@ -20,7 +20,7 @@
 
     final VectorList<Vector> normals = mesh.getViewForAttrib('NORMAL');
     if (normals is Vector3List) {
-      for (int i = 0; i < normals.length; ++i) {
+      for (var i = 0; i < normals.length; ++i) {
         normals[i] = -normals[i];
       }
     }
diff --git a/lib/src/vector_math_geometry/filters/transform_filter.dart b/lib/src/vector_math_geometry/filters/transform_filter.dart
index be6ed70..669cbec 100644
--- a/lib/src/vector_math_geometry/filters/transform_filter.dart
+++ b/lib/src/vector_math_geometry/filters/transform_filter.dart
@@ -17,7 +17,7 @@
   void filterInplace(MeshGeometry mesh) {
     final VectorList<Vector> position = mesh.getViewForAttrib('POSITION');
     if (position is Vector3List) {
-      for (int i = 0; i < position.length; ++i) {
+      for (var i = 0; i < position.length; ++i) {
         // multiplication always returns Vector3 here
         // ignore: invalid_assignment
         position[i] = transform * position[i];
diff --git a/lib/src/vector_math_geometry/generators/attribute_generators.dart b/lib/src/vector_math_geometry/generators/attribute_generators.dart
index e4795fa..436b4b0 100644
--- a/lib/src/vector_math_geometry/generators/attribute_generators.dart
+++ b/lib/src/vector_math_geometry/generators/attribute_generators.dart
@@ -16,7 +16,7 @@
 
   // Loop through every polygon, find it's normal, and add that to the vertex
   // normals.
-  for (int i = 0; i < indices.length; i += 3) {
+  for (var i = 0; i < indices.length; i += 3) {
     final int i0 = indices[i], i1 = indices[i + 1], i2 = indices[i + 2];
     positions..load(i0, p0)..load(i1, p1)..load(i2, p2);
 
@@ -38,7 +38,7 @@
   }
 
   // Loop through all the normals and normalize them.
-  for (int i = 0; i < normals.length; ++i) {
+  for (var i = 0; i < normals.length; ++i) {
     normals.load(i, norm);
     normals[i] = norm..normalize();
   }
@@ -74,7 +74,7 @@
   final Vector3List tan0 = Vector3List(positions.length),
       tan1 = Vector3List(positions.length);
 
-  for (int i = 0; i < indices.length; i += 3) {
+  for (var i = 0; i < indices.length; i += 3) {
     final int i0 = indices[i], i1 = indices[i + 1], i2 = indices[i + 2];
     positions..load(i0, p0)..load(i1, p1)..load(i2, p2);
 
@@ -108,7 +108,7 @@
     tan1[i2] = p0..add(vdir);
   }
 
-  for (int i = 0; i < tangents.length; ++i) {
+  for (var i = 0; i < tangents.length; ++i) {
     normals.load(i, n);
     tan0.load(i, t);
 
diff --git a/lib/src/vector_math_geometry/generators/circle_generator.dart b/lib/src/vector_math_geometry/generators/circle_generator.dart
index 54e3bff..1aeb9bc 100644
--- a/lib/src/vector_math_geometry/generators/circle_generator.dart
+++ b/lib/src/vector_math_geometry/generators/circle_generator.dart
@@ -33,8 +33,8 @@
   void generateVertexPositions(Vector3List positions, Uint16List indices) {
     final Vector3 v = Vector3.zero();
     positions[0] = v;
-    int index = 1;
-    for (int i = 0; i <= _segments; i++) {
+    var index = 1;
+    for (var i = 0; i <= _segments; i++) {
       final double percent = i / _segments;
       v
         ..x = _radius * math.cos(_thetaStart + percent * _thetaLength)
@@ -50,8 +50,8 @@
       Vector2List texCoords, Vector3List positions, Uint16List indices) {
     final Vector2 v = Vector2(0.5, 0.5);
     texCoords[0] = v;
-    int index = 1;
-    for (int i = 0; i <= _segments; i++) {
+    var index = 1;
+    for (var i = 0; i <= _segments; i++) {
       final Vector3 position = positions[index];
       final double x = (position.x / (_radius + 1.0)) * 0.5;
       final double y = (position.z / (_radius + 1.0)) * 0.5;
@@ -66,8 +66,8 @@
 
   @override
   void generateIndices(Uint16List indices) {
-    int index = 0;
-    for (int i = 1; i <= _segments; i++) {
+    var index = 0;
+    for (var i = 1; i <= _segments; i++) {
       indices[index] = i;
       indices[index + 1] = i + 1;
       indices[index + 2] = 0;
diff --git a/lib/src/vector_math_geometry/generators/cylinder_generator.dart b/lib/src/vector_math_geometry/generators/cylinder_generator.dart
index bdb8143..b840f30 100644
--- a/lib/src/vector_math_geometry/generators/cylinder_generator.dart
+++ b/lib/src/vector_math_geometry/generators/cylinder_generator.dart
@@ -30,12 +30,12 @@
 
   @override
   void generateIndices(Uint16List indices) {
-    int i = 0;
+    var i = 0;
 
     // Sides
-    int base1 = 0;
+    var base1 = 0;
     final int base2 = _segments + 1;
-    for (int x = 0; x < _segments; ++x) {
+    for (var x = 0; x < _segments; ++x) {
       indices[i++] = base1 + x;
       indices[i++] = base1 + x + 1;
       indices[i++] = base2 + x;
@@ -47,7 +47,7 @@
 
     // Top cap
     base1 = (_segments + 1) * 2;
-    for (int x = 1; x < _segments - 1; ++x) {
+    for (var x = 1; x < _segments - 1; ++x) {
       indices[i++] = base1;
       indices[i++] = base1 + x + 1;
       indices[i++] = base1 + x;
@@ -55,7 +55,7 @@
 
     // Bottom cap
     base1 = (_segments + 1) * 2 + _segments;
-    for (int x = 1; x < _segments - 1; ++x) {
+    for (var x = 1; x < _segments - 1; ++x) {
       indices[i++] = base1;
       indices[i++] = base1 + x;
       indices[i++] = base1 + x + 1;
@@ -64,10 +64,10 @@
 
   @override
   void generateVertexPositions(Vector3List positions, Uint16List indices) {
-    int i = 0;
+    var i = 0;
 
     // Top
-    for (int x = 0; x <= _segments; ++x) {
+    for (var x = 0; x <= _segments; ++x) {
       final double u = x / _segments;
 
       positions[i++] = Vector3(_topRadius * math.cos(u * math.pi * 2.0),
@@ -75,7 +75,7 @@
     }
 
     // Bottom
-    for (int x = 0; x <= _segments; ++x) {
+    for (var x = 0; x <= _segments; ++x) {
       final double u = x / _segments;
 
       positions[i++] = Vector3(_bottomRadius * math.cos(u * math.pi * 2.0),
@@ -83,7 +83,7 @@
     }
 
     // Top cap
-    for (int x = 0; x < _segments; ++x) {
+    for (var x = 0; x < _segments; ++x) {
       final double u = x / _segments;
 
       positions[i++] = Vector3(_topRadius * math.cos(u * math.pi * 2.0),
@@ -91,7 +91,7 @@
     }
 
     // Bottom cap
-    for (int x = 0; x < _segments; ++x) {
+    for (var x = 0; x < _segments; ++x) {
       final double u = x / _segments;
 
       positions[i++] = Vector3(_bottomRadius * math.cos(u * math.pi * 2.0),
@@ -102,29 +102,29 @@
   @override
   void generateVertexTexCoords(
       Vector2List texCoords, Vector3List positions, Uint16List indices) {
-    int i = 0;
+    var i = 0;
 
     // Cylinder top
-    for (int x = 0; x <= _segments; ++x) {
+    for (var x = 0; x <= _segments; ++x) {
       final double u = 1.0 - (x / _segments);
       texCoords[i++] = Vector2(u, 0.0);
     }
 
     // Cylinder bottom
-    for (int x = 0; x <= _segments; ++x) {
+    for (var x = 0; x <= _segments; ++x) {
       final double u = 1.0 - (x / _segments);
       texCoords[i++] = Vector2(u, 1.0);
     }
 
     // Top cap
-    for (int x = 0; x < _segments; ++x) {
+    for (var x = 0; x < _segments; ++x) {
       final double r = (x / _segments) * math.pi * 2.0;
       texCoords[i++] =
           Vector2(math.cos(r) * 0.5 + 0.5, math.sin(r) * 0.5 + 0.5);
     }
 
     // Bottom cap
-    for (int x = 0; x < _segments; ++x) {
+    for (var x = 0; x < _segments; ++x) {
       final double r = (x / _segments) * math.pi * 2.0;
       texCoords[i++] =
           Vector2(math.cos(r) * 0.5 + 0.5, math.sin(r) * 0.5 + 0.5);
diff --git a/lib/src/vector_math_geometry/generators/geometry_generator.dart b/lib/src/vector_math_geometry/generators/geometry_generator.dart
index c863ecc..d7553b8 100644
--- a/lib/src/vector_math_geometry/generators/geometry_generator.dart
+++ b/lib/src/vector_math_geometry/generators/geometry_generator.dart
@@ -51,11 +51,11 @@
       attribs.add(tangentAttrib);
     }
 
-    MeshGeometry mesh = MeshGeometry(vertexCount, attribs)
+    var mesh = MeshGeometry(vertexCount, attribs)
       ..indices = Uint16List(indexCount);
     generateIndices(mesh.indices);
 
-    VectorList<Vector> view = mesh.getViewForAttrib('POSITION');
+    var view = mesh.getViewForAttrib('POSITION');
     if (view is Vector3List) {
       positionView = view;
       generateVertexPositions(positionView, mesh.indices);
@@ -87,7 +87,7 @@
     }
 
     if (filters != null) {
-      for (GeometryFilter filter in filters) {
+      for (var filter in filters) {
         if (filter.inplace && filter is InplaceGeometryFilter) {
           filter.filterInplace(mesh);
         } else {
@@ -105,7 +105,7 @@
 
   void generateVertexTexCoords(
       Vector2List texCoords, Vector3List positions, Uint16List indices) {
-    for (int i = 0; i < positions.length; ++i) {
+    for (var i = 0; i < positions.length; ++i) {
       final Vector3 p = positions[i];
 
       // These are TERRIBLE texture coords, but it's better than nothing.
diff --git a/lib/src/vector_math_geometry/generators/ring_generator.dart b/lib/src/vector_math_geometry/generators/ring_generator.dart
index 2e62801..0dc0924 100644
--- a/lib/src/vector_math_geometry/generators/ring_generator.dart
+++ b/lib/src/vector_math_geometry/generators/ring_generator.dart
@@ -37,8 +37,8 @@
   @override
   void generateVertexPositions(Vector3List positions, Uint16List indices) {
     final Vector3 v = Vector3.zero();
-    int index = 0;
-    for (int i = 0; i <= _segments; i++) {
+    var index = 0;
+    for (var i = 0; i <= _segments; i++) {
       final double percent = i / _segments;
       v
         ..x = _innerRadius * math.cos(_thetaStart + percent * _thetaLength)
@@ -59,8 +59,8 @@
       Vector2List texCoords, Vector3List positions, Uint16List indices) {
     if (_stripTextureCoordinates) {
       final Vector2 v = Vector2.zero();
-      int index = 0;
-      for (int i = 0; i <= _segments; i++) {
+      var index = 0;
+      for (var i = 0; i <= _segments; i++) {
         final double percent = i / _segments;
         v
           ..x = 0.0
@@ -75,11 +75,11 @@
       }
     } else {
       final Vector2 v = Vector2.zero();
-      int index = 0;
-      for (int i = 0; i <= _segments; i++) {
-        Vector3 position = positions[index];
-        double x = (position.x / (_outerRadius + 1.0)) * 0.5;
-        double y = (position.z / (_outerRadius + 1.0)) * 0.5;
+      var index = 0;
+      for (var i = 0; i <= _segments; i++) {
+        var position = positions[index];
+        var x = (position.x / (_outerRadius + 1.0)) * 0.5;
+        var y = (position.z / (_outerRadius + 1.0)) * 0.5;
         v
           ..x = x + 0.5
           ..y = y + 0.5;
@@ -100,9 +100,9 @@
 
   @override
   void generateIndices(Uint16List indices) {
-    int index = 0;
+    var index = 0;
     final int length = _segments * 2;
-    for (int i = 0; i < length; i += 2) {
+    for (var i = 0; i < length; i += 2) {
       indices[index + 0] = i + 0;
       indices[index + 1] = i + 1;
       indices[index + 2] = i + 3;
diff --git a/lib/src/vector_math_geometry/generators/sphere_generator.dart b/lib/src/vector_math_geometry/generators/sphere_generator.dart
index b5bf36d..f0ee15b 100644
--- a/lib/src/vector_math_geometry/generators/sphere_generator.dart
+++ b/lib/src/vector_math_geometry/generators/sphere_generator.dart
@@ -29,12 +29,12 @@
 
   @override
   void generateIndices(Uint16List indices) {
-    int i = 0;
-    for (int y = 0; y < _latSegments; ++y) {
+    var i = 0;
+    for (var y = 0; y < _latSegments; ++y) {
       final int base1 = (_lonSegments + 1) * y;
       final int base2 = (_lonSegments + 1) * (y + 1);
 
-      for (int x = 0; x < _lonSegments; ++x) {
+      for (var x = 0; x < _lonSegments; ++x) {
         indices[i++] = base1 + x;
         indices[i++] = base1 + x + 1;
         indices[i++] = base2 + x;
@@ -48,13 +48,13 @@
 
   @override
   void generateVertexPositions(Vector3List positions, Uint16List indices) {
-    int i = 0;
-    for (int y = 0; y <= _latSegments; ++y) {
+    var i = 0;
+    for (var y = 0; y <= _latSegments; ++y) {
       final double v = y / _latSegments;
       final double sv = math.sin(v * math.pi);
       final double cv = math.cos(v * math.pi);
 
-      for (int x = 0; x <= _lonSegments; ++x) {
+      for (var x = 0; x <= _lonSegments; ++x) {
         final double u = x / _lonSegments;
 
         positions[i++] = Vector3(_radius * math.cos(u * math.pi * 2.0) * sv,
@@ -66,11 +66,11 @@
   @override
   void generateVertexTexCoords(
       Vector2List texCoords, Vector3List positions, Uint16List indices) {
-    int i = 0;
-    for (int y = 0; y <= _latSegments; ++y) {
+    var i = 0;
+    for (var y = 0; y <= _latSegments; ++y) {
       final double v = y / _latSegments;
 
-      for (int x = 0; x <= _lonSegments; ++x) {
+      for (var x = 0; x <= _lonSegments; ++x) {
         final double u = x / _lonSegments;
         texCoords[i++] = Vector2(u, v);
       }
@@ -80,13 +80,13 @@
   @override
   void generateVertexNormals(
       Vector3List normals, Vector3List positions, Uint16List indices) {
-    int i = 0;
-    for (int y = 0; y <= _latSegments; ++y) {
+    var i = 0;
+    for (var y = 0; y <= _latSegments; ++y) {
       final double v = y / _latSegments;
       final double sv = math.sin(v * math.pi);
       final double cv = math.cos(v * math.pi);
 
-      for (int x = 0; x <= _lonSegments; ++x) {
+      for (var x = 0; x <= _lonSegments; ++x) {
         final double u = x / _lonSegments;
 
         normals[i++] = Vector3(math.cos(u * math.pi * 2.0) * sv, cv,
diff --git a/lib/src/vector_math_geometry/mesh_geometry.dart b/lib/src/vector_math_geometry/mesh_geometry.dart
index c533b04..5062cfa 100644
--- a/lib/src/vector_math_geometry/mesh_geometry.dart
+++ b/lib/src/vector_math_geometry/mesh_geometry.dart
@@ -79,13 +79,13 @@
   final int stride;
 
   factory MeshGeometry(int length, List<VertexAttrib> attributes) {
-    int stride = 0;
-    for (VertexAttrib a in attributes) {
+    var stride = 0;
+    for (var a in attributes) {
       stride += a.elementSize * a.size;
     }
-    int offset = 0;
+    var offset = 0;
     final List<VertexAttrib> attribs = <VertexAttrib>[];
-    for (VertexAttrib a in attributes) {
+    for (var a in attributes) {
       attribs.add(VertexAttrib._resetStrideOffset(a, stride, offset));
       offset += a.elementSize * a.size;
     }
@@ -116,7 +116,7 @@
 
   factory MeshGeometry.fromJson(Map<String, Object> json) {
     Float32List buffer;
-    final Object jsonBuffer = json["buffer"];
+    final Object jsonBuffer = json['buffer'];
     if (jsonBuffer is List<double>) {
       buffer = Float32List.fromList(jsonBuffer);
     } else {
@@ -124,7 +124,7 @@
           jsonBuffer, 'json["buffer"]', 'Value type must be List<double>');
     }
 
-    final Object jsonAttribs = json["attribs"];
+    final Object jsonAttribs = json['attribs'];
     Map<String, Object> jsonAttribsMap;
     if (jsonAttribs is Map<String, Object>) {
       jsonAttribsMap = jsonAttribs;
@@ -133,8 +133,8 @@
           'Value type must be Map<String, Object>');
     }
     List<VertexAttrib> attribs;
-    int stride = 0;
-    for (String key in jsonAttribsMap.keys) {
+    var stride = 0;
+    for (var key in jsonAttribsMap.keys) {
       VertexAttrib attrib;
       final Object jsonAttrib = jsonAttribsMap[key];
       if (jsonAttrib is Map<String, Object>) {
@@ -149,7 +149,7 @@
     final MeshGeometry mesh = MeshGeometry._internal(
         buffer.lengthInBytes ~/ stride, stride, attribs, buffer);
 
-    final Object jsonIndices = json["indices"];
+    final Object jsonIndices = json['indices'];
     if (jsonIndices is List<int>) {
       mesh.indices = Uint16List.fromList(jsonIndices);
     }
@@ -163,13 +163,13 @@
       ..indices = inputMesh.indices;
 
     // Copy over the attributes that were specified
-    for (VertexAttrib attrib in mesh.attribs) {
+    for (var attrib in mesh.attribs) {
       final VertexAttrib inputAttrib = inputMesh.getAttrib(attrib.name);
       if (inputAttrib != null) {
         if (inputAttrib.size != attrib.size ||
             inputAttrib.type != attrib.type) {
           throw Exception(
-              "Attributes size or type is mismatched: ${attrib.name}");
+              'Attributes size or type is mismatched: ${attrib.name}');
         }
 
         final VectorList<Vector> inputView =
@@ -186,18 +186,18 @@
   factory MeshGeometry.combine(List<MeshGeometry> meshes) {
     if (meshes == null || meshes.length < 2) {
       throw Exception(
-          "Must provide at least two MeshGeometry instances to combine.");
+          'Must provide at least two MeshGeometry instances to combine.');
     }
 
     // When combining meshes they must all have a matching set of VertexAttribs
     final MeshGeometry firstMesh = meshes[0];
-    int totalVerts = firstMesh.length;
-    int totalIndices = firstMesh.indices != null ? firstMesh.indices.length : 0;
-    for (int i = 1; i < meshes.length; ++i) {
+    var totalVerts = firstMesh.length;
+    var totalIndices = firstMesh.indices != null ? firstMesh.indices.length : 0;
+    for (var i = 1; i < meshes.length; ++i) {
       final MeshGeometry srcMesh = meshes[i];
       if (!firstMesh.attribsAreCompatible(srcMesh)) {
         throw Exception(
-            "All meshes must have identical attributes to combine.");
+            'All meshes must have identical attributes to combine.');
       }
       totalVerts += srcMesh.length;
       totalIndices += srcMesh.indices != null ? srcMesh.indices.length : 0;
@@ -211,15 +211,15 @@
     }
 
     // Copy over the buffer data:
-    int bufferOffset = 0;
-    int indexOffset = 0;
-    int vertexOffset = 0;
-    for (int i = 0; i < meshes.length; ++i) {
+    var bufferOffset = 0;
+    var indexOffset = 0;
+    var vertexOffset = 0;
+    for (var i = 0; i < meshes.length; ++i) {
       final MeshGeometry srcMesh = meshes[i];
       mesh.buffer.setAll(bufferOffset, srcMesh.buffer);
 
       if (totalIndices > 0) {
-        for (int j = 0; j < srcMesh.indices.length; ++j) {
+        for (var j = 0; j < srcMesh.indices.length; ++j) {
           mesh.indices[j + indexOffset] = srcMesh.indices[j] + vertexOffset;
         }
         vertexOffset += srcMesh.length;
@@ -243,10 +243,10 @@
   }
 
   static VertexAttrib attribFromJson(String name, Map<String, Object> json) {
-    final Object jsonSize = json["size"];
-    final Object jsonType = json["type"];
-    final Object jsonStride = json["stride"];
-    final Object jsonOffset = json["offset"];
+    final Object jsonSize = json['size'];
+    final Object jsonType = json['type'];
+    final Object jsonStride = json['stride'];
+    final Object jsonOffset = json['offset'];
     if (jsonSize is int &&
         jsonType is String &&
         jsonStride is int &&
@@ -259,7 +259,7 @@
   }
 
   VertexAttrib getAttrib(String name) {
-    for (VertexAttrib attrib in attribs) {
+    for (var attrib in attribs) {
       if (attrib.name == name) {
         return attrib;
       }
@@ -268,7 +268,7 @@
   }
 
   VectorList<Vector> getViewForAttrib(String name) {
-    for (VertexAttrib attrib in attribs) {
+    for (var attrib in attribs) {
       if (attrib.name == name) {
         return attrib.getView(buffer);
       }
@@ -281,7 +281,7 @@
       return false;
     }
 
-    for (VertexAttrib attrib in attribs) {
+    for (var attrib in attribs) {
       final VertexAttrib otherAttrib = mesh.getAttrib(attrib.name);
       if (otherAttrib == null) {
         return false;
diff --git a/lib/src/vector_math_lists/scalar_list_view.dart b/lib/src/vector_math_lists/scalar_list_view.dart
index 5390380..4cd5f51 100644
--- a/lib/src/vector_math_lists/scalar_list_view.dart
+++ b/lib/src/vector_math_lists/scalar_list_view.dart
@@ -43,7 +43,7 @@
         _length = list.length,
         _buffer =
             Float32List(offset + list.length * (stride == 0 ? 1 : stride)) {
-    for (int i = 0; i < _length; i++) {
+    for (var i = 0; i < _length; i++) {
       this[i] = list[i];
     }
   }
diff --git a/lib/src/vector_math_lists/vector_list.dart b/lib/src/vector_math_lists/vector_list.dart
index 9127fbd..2c338b2 100644
--- a/lib/src/vector_math_lists/vector_list.dart
+++ b/lib/src/vector_math_lists/vector_list.dart
@@ -53,7 +53,7 @@
     if (_stride < _vectorLength) {
       throw ArgumentError('Stride cannot be smaller than the vector size.');
     }
-    for (int i = 0; i < _length; i++) {
+    for (var i = 0; i < _length; i++) {
       store(i, list[i]);
     }
   }
@@ -93,10 +93,10 @@
       count = math.min(length - offset, src.length - srcOffset);
     }
     final int minVectorLength = math.min(_vectorLength, src._vectorLength);
-    for (int i = 0; i < count; i++) {
-      int index = _vectorIndexToBufferIndex(i + offset);
-      int srcIndex = src._vectorIndexToBufferIndex(i + srcOffset);
-      for (int j = 0; j < minVectorLength; j++) {
+    for (var i = 0; i < count; i++) {
+      var index = _vectorIndexToBufferIndex(i + offset);
+      var srcIndex = src._vectorIndexToBufferIndex(i + srcOffset);
+      for (var j = 0; j < minVectorLength; j++) {
         _buffer[index++] = src._buffer[srcIndex++];
       }
     }
diff --git a/lib/src/vector_math_operations/matrix.dart b/lib/src/vector_math_operations/matrix.dart
index 514419c..18b9362 100644
--- a/lib/src/vector_math_operations/matrix.dart
+++ b/lib/src/vector_math_operations/matrix.dart
@@ -152,10 +152,10 @@
     final double a32 = a[aOffset++];
     final double a33 = a[aOffset++];
 
-    double b0 = b[bOffset++];
-    double b1 = b[bOffset++];
-    double b2 = b[bOffset++];
-    double b3 = b[bOffset++];
+    var b0 = b[bOffset++];
+    var b1 = b[bOffset++];
+    var b2 = b[bOffset++];
+    var b3 = b[bOffset++];
     out[outOffset++] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
     out[outOffset++] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
     out[outOffset++] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
@@ -298,7 +298,7 @@
       int matrixOffset, Float32x4List vector, int vectorOffset) {
     final Float32x4 v = vector[vectorOffset];
     final Float32x4 xxxx = v.shuffle(Float32x4.xxxx);
-    Float32x4 z = Float32x4.zero();
+    var z = Float32x4.zero();
     z += xxxx * matrix[0 + matrixOffset];
     final Float32x4 yyyy = v.shuffle(Float32x4.yyyy);
     z += yyyy * matrix[1 + matrixOffset];
diff --git a/pubspec.yaml b/pubspec.yaml
index 882f9b6..6a4b6b0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -5,7 +5,7 @@
 homepage: https://github.com/google/vector_math.dart
 
 environment:
-  sdk: '>=2.1.0 <3.0.0'
+  sdk: '>=2.3.0 <3.0.0'
 
 dev_dependencies:
   benchmark_harness: any
diff --git a/test/geometry_test.dart b/test/geometry_test.dart
index 124a290..3074307 100644
--- a/test/geometry_test.dart
+++ b/test/geometry_test.dart
@@ -24,7 +24,7 @@
 
   final Uint16List indices = Uint16List.fromList([0, 1, 2, 3, 2, 1]);
 
-  Vector3List normals = Vector3List(positions.length);
+  var normals = Vector3List(positions.length);
 
   generateNormals(normals, positions, indices);
 
@@ -58,7 +58,7 @@
 
   final Uint16List indices = Uint16List.fromList([0, 1, 2, 3, 2, 1]);
 
-  Vector4List tangents = Vector4List(positions.length);
+  var tangents = Vector4List(positions.length);
 
   generateTangents(tangents, positions, normals, texCoords, indices);
 
@@ -69,20 +69,20 @@
 }
 
 MeshGeometry filterUnitCube(GeometryFilter filter) {
-  CubeGenerator generator = CubeGenerator();
+  var generator = CubeGenerator();
   return generator.createCube(1.0, 1.0, 1.0, filters: [filter]);
 }
 
 void testTransformFilter() {
-  Matrix4 scaleMat = Matrix4.identity();
+  var scaleMat = Matrix4.identity();
   scaleMat.scale(2.0, 2.0, 2.0);
-  TransformFilter filter = TransformFilter(scaleMat);
-  MeshGeometry cube = filterUnitCube(filter);
+  var filter = TransformFilter(scaleMat);
+  var cube = filterUnitCube(filter);
 
   // Check to ensure all the vertices were properly scaled
-  Vector3List positions = cube.getViewForAttrib("POSITION") as Vector3List;
-  for (int i = 0; i < positions.length; ++i) {
-    Vector3 position = positions[i];
+  var positions = cube.getViewForAttrib('POSITION') as Vector3List;
+  for (var i = 0; i < positions.length; ++i) {
+    var position = positions[i];
     expect(position.storage[0].abs(), equals(2.0));
     expect(position.storage[1].abs(), equals(2.0));
     expect(position.storage[2].abs(), equals(2.0));
@@ -90,8 +90,8 @@
 }
 
 void testFlatShadeFilter() {
-  FlatShadeFilter filter = FlatShadeFilter();
-  MeshGeometry cube = filterUnitCube(filter);
+  var filter = FlatShadeFilter();
+  var cube = filterUnitCube(filter);
 
   // Flat shading removes indices and duplicates vertices
   expect(cube.indices, equals(null));
@@ -99,39 +99,39 @@
 }
 
 void testBarycentricFilter() {
-  BarycentricFilter filter = BarycentricFilter();
-  MeshGeometry cube = filterUnitCube(filter);
+  var filter = BarycentricFilter();
+  var cube = filterUnitCube(filter);
 
   // Generating barycentric coords removes indices and duplicates vertices
   expect(cube.indices, equals(null));
   expect(cube.length, equals(36));
 
-  expect(cube.getViewForAttrib("BARYCENTRIC"), isNotNull);
+  expect(cube.getViewForAttrib('BARYCENTRIC'), isNotNull);
 }
 
 void testColorFilter() {
-  Vector4 filterColor = Vector4(1.0, 0.0, 0.0, 1.0);
-  ColorFilter filter = ColorFilter(filterColor);
-  MeshGeometry cube = filterUnitCube(filter);
+  var filterColor = Vector4(1.0, 0.0, 0.0, 1.0);
+  var filter = ColorFilter(filterColor);
+  var cube = filterUnitCube(filter);
 
   // Ensure that the same color was applied to all vertices
-  Vector4List colors = cube.getViewForAttrib("COLOR") as Vector4List;
-  for (int i = 0; i < colors.length; ++i) {
-    Vector4 color = colors[i];
+  var colors = cube.getViewForAttrib('COLOR') as Vector4List;
+  for (var i = 0; i < colors.length; ++i) {
+    var color = colors[i];
     relativeTest(color, filterColor);
   }
 }
 
 void testCombineIndices() {
   // Combining two meshes should generate indices that are not out of range.
-  SphereGenerator sphereGenerator = SphereGenerator();
+  var sphereGenerator = SphereGenerator();
 
-  MeshGeometry sphere0 =
+  var sphere0 =
       sphereGenerator.createSphere(10.0, latSegments: 8, lonSegments: 8);
-  MeshGeometry sphere1 =
+  var sphere1 =
       sphereGenerator.createSphere(10.0, latSegments: 8, lonSegments: 8);
 
-  MeshGeometry combined = MeshGeometry.combine([sphere0, sphere1]);
+  var combined = MeshGeometry.combine([sphere0, sphere1]);
   expect(combined.indices, everyElement(lessThan(combined.length)));
 }
 
diff --git a/test/matrix2_test.dart b/test/matrix2_test.dart
index d860263..fa1dd82 100644
--- a/test/matrix2_test.dart
+++ b/test/matrix2_test.dart
@@ -28,7 +28,7 @@
 
   assert(input.length == expectedOutput.length);
 
-  for (int i = 0; i < input.length; i++) {
+  for (var i = 0; i < input.length; i++) {
     var output = input[i].clone();
     output.scaleAdjoint(1.0);
     relativeTest(output, expectedOutput[i]);
@@ -37,7 +37,7 @@
 
 void testMatrix2Determinant() {
   var input = <Matrix2>[];
-  List<double> expectedOutput = <double>[];
+  var expectedOutput = <double>[];
 
   input.add(parseMatrix<Matrix2>('''0.830828627896291   0.549723608291140
                                     0.585264091152724   0.917193663829810'''));
@@ -45,8 +45,8 @@
 
   assert(input.length == expectedOutput.length);
 
-  for (int i = 0; i < input.length; i++) {
-    double output = input[i].determinant();
+  for (var i = 0; i < input.length; i++) {
+    var output = input[i].determinant();
     //print('${input[i].cols}x${input[i].rows} = $output');
     relativeTest(output, expectedOutput[i]);
   }
@@ -69,9 +69,9 @@
 }
 
 void testMatrix2Inversion() {
-  Matrix2 m = Matrix2(4.0, 3.0, 3.0, 2.0);
-  Matrix2 result = Matrix2.zero();
-  double det = result.copyInverse(m);
+  var m = Matrix2(4.0, 3.0, 3.0, 2.0);
+  var result = Matrix2.zero();
+  var det = result.copyInverse(m);
   expect(det, -1.0);
   expect(result.entry(0, 0), -2.0);
   expect(result.entry(1, 0), 3.0);
diff --git a/test/matrix3_test.dart b/test/matrix3_test.dart
index 2d191b3..fea1469 100644
--- a/test/matrix3_test.dart
+++ b/test/matrix3_test.dart
@@ -41,7 +41,7 @@
 
   assert(input.length == expectedOutput.length);
 
-  for (int i = 0; i < input.length; i++) {
+  for (var i = 0; i < input.length; i++) {
     dynamic output = input[i].clone();
     output.scaleAdjoint(1.0);
     relativeTest(output, expectedOutput[i]);
@@ -50,7 +50,7 @@
 
 void testMatrix3Determinant() {
   var input = <Matrix3>[];
-  List<double> expectedOutput = <double>[];
+  var expectedOutput = <double>[];
 
   input.add(parseMatrix<Matrix3>(
       '''0.285839018820374   0.380445846975357   0.053950118666607
@@ -60,8 +60,8 @@
 
   assert(input.length == expectedOutput.length);
 
-  for (int i = 0; i < input.length; i++) {
-    double output = input[i].determinant();
+  for (var i = 0; i < input.length; i++) {
+    var output = input[i].determinant();
     //print('${input[i].cols}x${input[i].rows} = $output');
     relativeTest(output, expectedOutput[i]);
   }
@@ -100,7 +100,7 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i].clone();
     output.transposeMultiply(inputB[i]);
     relativeTest(output, expectedOutput[i]);
@@ -140,7 +140,7 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i].clone();
     output.multiply(inputB[i]);
     relativeTest(output, expectedOutput[i]);
@@ -180,7 +180,7 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i].clone();
     output.multiplyTranspose(inputB[i]);
     relativeTest(output, expectedOutput[i]);
@@ -188,9 +188,9 @@
 }
 
 void testMatrix3Transform() {
-  Matrix3 rotX = Matrix3.rotationX(math.pi / 4);
-  Matrix3 rotY = Matrix3.rotationY(math.pi / 4);
-  Matrix3 rotZ = Matrix3.rotationZ(math.pi / 4);
+  var rotX = Matrix3.rotationX(math.pi / 4);
+  var rotY = Matrix3.rotationY(math.pi / 4);
+  var rotZ = Matrix3.rotationZ(math.pi / 4);
   final input = Vector3(1.0, 0.0, 0.0);
 
   relativeTest(rotX.transformed(input), input);
@@ -201,10 +201,9 @@
 }
 
 void testMatrix3Transform2() {
-  Matrix3 rotZ = Matrix3.rotationZ(math.pi / 4);
-  Matrix3 trans = Matrix3(1.0, 0.0, 3.0, 0.0, 1.0, 2.0, 3.0, 2.0, 1.0);
-  Matrix3 transB =
-      Matrix3.fromList([1.0, 0.0, 3.0, 0.0, 1.0, 2.0, 3.0, 2.0, 1.0]);
+  var rotZ = Matrix3.rotationZ(math.pi / 4);
+  var trans = Matrix3(1.0, 0.0, 3.0, 0.0, 1.0, 2.0, 3.0, 2.0, 1.0);
+  var transB = Matrix3.fromList([1.0, 0.0, 3.0, 0.0, 1.0, 2.0, 3.0, 2.0, 1.0]);
   expect(trans, equals(transB));
 
   final input = Vector2(1.0, 0.0);
@@ -216,8 +215,8 @@
 }
 
 void testMatrix3AbsoluteRotate2() {
-  Matrix3 rotZ = Matrix3.rotationZ(-math.pi / 4);
-  Matrix3 rotZcw = Matrix3.rotationZ(math.pi / 4);
+  var rotZ = Matrix3.rotationZ(-math.pi / 4);
+  var rotZcw = Matrix3.rotationZ(math.pi / 4);
   // Add translation
   rotZ.setEntry(2, 0, 3.0);
   rotZ.setEntry(2, 1, 2.0);
@@ -235,7 +234,7 @@
   var a = Vector3(1.0, 2.0, 3.0);
   var b = Vector3(4.0, 5.0, 6.0);
   var c = Vector3(7.0, 8.0, 9.0);
-  Matrix3 m = Matrix3.columns(a, b, c);
+  var m = Matrix3.columns(a, b, c);
   expect(m.entry(0, 0), 1.0);
   expect(m.entry(2, 2), 9.0);
   c.z = 5.0;
@@ -245,9 +244,9 @@
 }
 
 void testMatrix3Inversion() {
-  Matrix3 m = Matrix3(1.0, 0.0, 5.0, 2.0, 1.0, 6.0, 3.0, 4.0, 0.0);
-  Matrix3 result = Matrix3.zero();
-  double det = result.copyInverse(m);
+  var m = Matrix3(1.0, 0.0, 5.0, 2.0, 1.0, 6.0, 3.0, 4.0, 0.0);
+  var result = Matrix3.zero();
+  var det = result.copyInverse(m);
   expect(det, 1.0);
   expect(result.entry(0, 0), -24.0);
   expect(result.entry(1, 0), 20.0);
diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart
index f7a4383..8d99438 100644
--- a/test/matrix4_test.dart
+++ b/test/matrix4_test.dart
@@ -127,7 +127,7 @@
          0.111202755293787   0.403912145588115   0.956134540229802   0.353158571222071'''));
   expectedOutput.add(inputA[0].transposed());
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     inputA[i].transpose();
     relativeTest(inputA[i], expectedOutput[i]);
   }
@@ -155,7 +155,7 @@
   assert(inputA.length == inputB.length);
   assert(expectedOutput.length == inputB.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i] * inputB[i] as Vector4;
     relativeTest(output, expectedOutput[i]);
   }
@@ -185,7 +185,7 @@
   assert(inputA.length == inputB.length);
   assert(expectedOutput.length == inputB.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i] * inputB[i] as Matrix4;
     //print('${inputA[i].cols}x${inputA[i].rows} * ${inputB[i].cols}x${inputB[i].rows} = ${output.cols}x${output.rows}');
     relativeTest(output, expectedOutput[i]);
@@ -228,7 +228,7 @@
 
   assert(input.length == expectedOutput.length);
 
-  for (int i = 0; i < input.length; i++) {
+  for (var i = 0; i < input.length; i++) {
     var output = input[i].clone();
     output.scaleAdjoint(1.0);
     relativeTest(output, expectedOutput[i]);
@@ -237,7 +237,7 @@
 
 void testMatrix4Determinant() {
   var input = <Matrix4>[];
-  List<double> expectedOutput = <double>[];
+  var expectedOutput = <double>[];
   input.add(parseMatrix<Matrix4>(
       '''0.046171390631154   0.317099480060861   0.381558457093008   0.489764395788231
          0.097131781235848   0.950222048838355   0.765516788149002   0.445586200710899
@@ -260,8 +260,8 @@
   expectedOutput.add(0.117969860982876);
   assert(input.length == expectedOutput.length);
 
-  for (int i = 0; i < input.length; i++) {
-    double output = input[i].determinant();
+  for (var i = 0; i < input.length; i++) {
+    var output = input[i].determinant();
     //print('${input[i].cols}x${input[i].rows} = $output');
     relativeTest(output, expectedOutput[i]);
   }
@@ -291,7 +291,7 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i].clone();
     output.transposeMultiply(inputB[i]);
     relativeTest(output, expectedOutput[i]);
@@ -322,7 +322,7 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i].clone();
     output.multiply(inputB[i]);
     relativeTest(output, expectedOutput[i]);
@@ -353,7 +353,7 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     var output = inputA[i].clone();
     output.multiplyTranspose(inputB[i]);
     relativeTest(output, expectedOutput[i]);
@@ -374,7 +374,7 @@
   assert(inputA.length == inputB.length);
   assert(output1.length == output2.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     relativeTest(output1[i], output2[i]);
   }
 }
@@ -393,7 +393,7 @@
   assert(inputA.length == inputB.length);
   assert(output1.length == output2.length);
 
-  for (int i = 0; i < inputA.length; i++) {
+  for (var i = 0; i < inputA.length; i++) {
     relativeTest(output1[i], output2[i]);
   }
 }
@@ -410,18 +410,18 @@
   {
     var axis = Vector3(1.1, 1.1, 1.1);
     axis.normalize();
-    double angle = 1.5;
+    var angle = 1.5;
 
-    Quaternion q = Quaternion.axisAngle(axis, angle);
-    Matrix3 R = q.asRotationMatrix();
-    Matrix4 T = Matrix4.identity();
+    var q = Quaternion.axisAngle(axis, angle);
+    var R = q.asRotationMatrix();
+    var T = Matrix4.identity();
     T.setRotation(R);
     output1.add(T);
 
     output2.add(Matrix4.identity()..rotate(axis, angle));
   }
   assert(output1.length == output2.length);
-  for (int i = 0; i < output1.length; i++) {
+  for (var i = 0; i < output1.length; i++) {
     relativeTest(output1[i], output2[i]);
   }
   return;
@@ -440,7 +440,7 @@
 }
 
 void testMatrix4Column() {
-  Matrix4 I = Matrix4.zero();
+  var I = Matrix4.zero();
   expect(I[0], 0.0);
   var c0 = Vector4(1.0, 2.0, 3.0, 4.0);
   I.setColumn(0, c0);
@@ -451,10 +451,10 @@
 }
 
 void testMatrix4Inversion() {
-  Matrix4 m = Matrix4(1.0, 0.0, 2.0, 2.0, 0.0, 2.0, 1.0, 0.0, 0.0, 1.0, 0.0,
-      1.0, 1.0, 2.0, 1.0, 4.0);
-  Matrix4 result = Matrix4.zero();
-  double det = result.copyInverse(m);
+  var m = Matrix4(1.0, 0.0, 2.0, 2.0, 0.0, 2.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0,
+      1.0, 2.0, 1.0, 4.0);
+  var result = Matrix4.zero();
+  var det = result.copyInverse(m);
   expect(det, 2.0);
   expect(result.entry(0, 0), -2.0);
   expect(result.entry(1, 0), 1.0);
@@ -599,7 +599,7 @@
 }
 
 void testMatrix4InvertConstructor() {
-  bool exception = false;
+  var exception = false;
   try {
     Matrix4.inverted(Matrix4.zero());
     expect(false, isTrue); // don't hit here.
diff --git a/test/noise_test.dart b/test/noise_test.dart
index a013352..dff3375 100644
--- a/test/noise_test.dart
+++ b/test/noise_test.dart
@@ -11,11 +11,11 @@
 void testSimplexNoise() {
   final SimplexNoise noise = SimplexNoise();
 
-  List<double> values2D = List<double>(10);
-  List<double> values3D = List<double>(10);
+  var values2D = List<double>(10);
+  var values3D = List<double>(10);
 
   // Cache several values at known coordinates
-  for (int i = 0; i < values2D.length; ++i) {
+  for (var i = 0; i < values2D.length; ++i) {
     values2D[i] = noise.noise2D(i.toDouble(), i.toDouble());
     values3D[i] = noise.noise3D(i.toDouble(), i.toDouble(), i.toDouble());
   }
diff --git a/test/opengl_matrix_test.dart b/test/opengl_matrix_test.dart
index e48fc4f..02dcf8b 100644
--- a/test/opengl_matrix_test.dart
+++ b/test/opengl_matrix_test.dart
@@ -12,28 +12,28 @@
 import 'test_utils.dart';
 
 void testUnproject() {
-  Vector3 position = Vector3(0.0, 0.0, 0.0);
-  Vector3 focusPosition = Vector3(0.0, 0.0, -1.0);
-  Vector3 upDirection = Vector3(0.0, 1.0, 0.0);
-  Matrix4 lookat = makeViewMatrix(position, focusPosition, upDirection);
-  double n = 0.1;
-  double f = 1000.0;
-  double l = -10.0;
-  double r = 10.0;
-  double b = -10.0;
-  double t = 10.0;
-  Matrix4 frustum = makeFrustumMatrix(l, r, b, t, n, f);
-  Matrix4 C = frustum * lookat as Matrix4;
-  Vector3 re = Vector3.zero();
+  var position = Vector3(0.0, 0.0, 0.0);
+  var focusPosition = Vector3(0.0, 0.0, -1.0);
+  var upDirection = Vector3(0.0, 1.0, 0.0);
+  var lookat = makeViewMatrix(position, focusPosition, upDirection);
+  var n = 0.1;
+  var f = 1000.0;
+  var l = -10.0;
+  var r = 10.0;
+  var b = -10.0;
+  var t = 10.0;
+  var frustum = makeFrustumMatrix(l, r, b, t, n, f);
+  var C = frustum * lookat as Matrix4;
+  var re = Vector3.zero();
   unproject(C, 0.0, 100.0, 0.0, 100.0, 50.0, 50.0, 1.0, re);
 }
 
 void testLookAt() {
-  Vector3 eyePosition = Vector3(0.0, 0.0, 0.0);
-  Vector3 lookAtPosition = Vector3(0.0, 0.0, -1.0);
-  Vector3 upDirection = Vector3(0.0, 1.0, 0.0);
+  var eyePosition = Vector3(0.0, 0.0, 0.0);
+  var lookAtPosition = Vector3(0.0, 0.0, -1.0);
+  var upDirection = Vector3(0.0, 1.0, 0.0);
 
-  Matrix4 lookat = makeViewMatrix(eyePosition, lookAtPosition, upDirection);
+  var lookat = makeViewMatrix(eyePosition, lookAtPosition, upDirection);
   assert(lookat.getColumn(0).w == 0.0);
   assert(lookat.getColumn(1).w == 0.0);
   assert(lookat.getColumn(2).w == 0.0);
@@ -45,13 +45,13 @@
 }
 
 void testFrustumMatrix() {
-  double n = 0.1;
-  double f = 1000.0;
-  double l = -1.0;
-  double r = 1.0;
-  double b = -1.0;
-  double t = 1.0;
-  Matrix4 frustum = makeFrustumMatrix(l, r, b, t, n, f);
+  var n = 0.1;
+  var f = 1000.0;
+  var l = -1.0;
+  var r = 1.0;
+  var b = -1.0;
+  var t = 1.0;
+  var frustum = makeFrustumMatrix(l, r, b, t, n, f);
   relativeTest(frustum.getColumn(0), Vector4(2 * n / (r - l), 0.0, 0.0, 0.0));
   relativeTest(frustum.getColumn(1), Vector4(0.0, 2 * n / (t - b), 0.0, 0.0));
   relativeTest(frustum.getColumn(2),
@@ -66,7 +66,7 @@
   final double zNear = 1.0;
   final double zFar = 100.0;
 
-  Matrix4 perspective = makePerspectiveMatrix(fov, aspectRatio, zNear, zFar);
+  var perspective = makePerspectiveMatrix(fov, aspectRatio, zNear, zFar);
   relativeTest(perspective.getColumn(0), Vector4(0.5, 0.0, 0.0, 0.0));
   relativeTest(perspective.getColumn(1), Vector4(0.0, 1.0, 0.0, 0.0));
   relativeTest(
@@ -79,7 +79,7 @@
   final double aspectRatio = 2.0;
   final double zNear = 1.0;
 
-  Matrix4 infinite = makeInfiniteMatrix(fov, aspectRatio, zNear);
+  var infinite = makeInfiniteMatrix(fov, aspectRatio, zNear);
   relativeTest(infinite.getColumn(0), Vector4(0.5, 0.0, 0.0, 0.0));
   relativeTest(infinite.getColumn(1), Vector4(0.0, 1.0, 0.0, 0.0));
   relativeTest(infinite.getColumn(2), Vector4(0.0, 0.0, -1.0, -1.0));
@@ -87,13 +87,13 @@
 }
 
 void testOrthographicMatrix() {
-  double n = 0.1;
-  double f = 1000.0;
-  double l = -1.0;
-  double r = 1.0;
-  double b = -1.0;
-  double t = 1.0;
-  Matrix4 ortho = makeOrthographicMatrix(l, r, b, t, n, f);
+  var n = 0.1;
+  var f = 1000.0;
+  var l = -1.0;
+  var r = 1.0;
+  var b = -1.0;
+  var t = 1.0;
+  var ortho = makeOrthographicMatrix(l, r, b, t, n, f);
   relativeTest(ortho.getColumn(0), Vector4(2 / (r - l), 0.0, 0.0, 0.0));
   relativeTest(ortho.getColumn(1), Vector4(0.0, 2 / (t - b), 0.0, 0.0));
   relativeTest(ortho.getColumn(2), Vector4(0.0, 0.0, -2 / (f - n), 0.0));
@@ -102,25 +102,25 @@
 }
 
 void testModelMatrix() {
-  Matrix4 view = Matrix4.zero();
-  Vector3 position = Vector3(1.0, 1.0, 1.0);
-  Vector3 focus = Vector3(0.0, 0.0, -1.0);
-  Vector3 up = Vector3(0.0, 1.0, 0.0);
+  var view = Matrix4.zero();
+  var position = Vector3(1.0, 1.0, 1.0);
+  var focus = Vector3(0.0, 0.0, -1.0);
+  var up = Vector3(0.0, 1.0, 0.0);
 
   setViewMatrix(view, position, focus, up);
 
-  Matrix4 model = Matrix4.zero();
+  var model = Matrix4.zero();
 
-  Vector3 forward = focus.clone();
+  var forward = focus.clone();
   forward.sub(position);
   forward.normalize();
 
-  Vector3 right = forward.cross(up).normalized();
-  Vector3 u = right.cross(forward).normalized();
+  var right = forward.cross(up).normalized();
+  var u = right.cross(forward).normalized();
 
   setModelMatrix(model, forward, u, position.x, position.y, position.z);
 
-  Matrix4 result1 = view.clone();
+  var result1 = view.clone();
   result1.multiply(model);
 
   relativeTest(result1, Matrix4.identity());
diff --git a/test/quaternion_test.dart b/test/quaternion_test.dart
index 2c8afef..9c2568a 100644
--- a/test/quaternion_test.dart
+++ b/test/quaternion_test.dart
@@ -43,24 +43,24 @@
 
 void testConjugate(List<Quaternion> input, List<Quaternion> expectedOutput) {
   assert(input.length == expectedOutput.length);
-  for (int i = 0; i < input.length; i++) {
-    Quaternion output = input[i]..conjugate();
+  for (var i = 0; i < input.length; i++) {
+    var output = input[i]..conjugate();
     relativeTest(output, expectedOutput[i]);
   }
 }
 
 void testQuaternionMatrixRoundTrip(List<Quaternion> input) {
-  for (int i = 0; i < input.length; i++) {
-    Matrix3 R = input[i].asRotationMatrix();
-    Quaternion output = Quaternion.fromRotation(R);
+  for (var i = 0; i < input.length; i++) {
+    var R = input[i].asRotationMatrix();
+    var output = Quaternion.fromRotation(R);
     relativeTest(output, input[i]);
   }
 }
 
 void testQuaternionMultiply(List<Quaternion> inputA, List<Quaternion> inputB,
     List<Quaternion> expectedOutput) {
-  for (int i = 0; i < inputA.length; i++) {
-    Quaternion output = inputA[i] * inputB[i];
+  for (var i = 0; i < inputA.length; i++) {
+    var output = inputA[i] * inputB[i];
     relativeTest(output, expectedOutput[i]);
   }
 }
@@ -69,18 +69,18 @@
     List<Vector3> expectedOutput) {
   assert((inputA.length == inputB.length) &&
       (inputB.length == expectedOutput.length));
-  for (int i = 0; i < inputA.length; i++) {
-    Vector3 output = inputA[i].rotate(inputB[i]);
+  for (var i = 0; i < inputA.length; i++) {
+    var output = inputA[i].rotate(inputB[i]);
     relativeTest(output, expectedOutput[i]);
   }
 }
 
 void testQuaternionConjugate() {
-  List<Quaternion> input = <Quaternion>[];
+  var input = <Quaternion>[];
   input.add(Quaternion.identity());
   input.add(Quaternion(0.18260, 0.54770, 0.73030, 0.36510));
   input.add(Quaternion(0.9889, 0.0, 0.0, 0.14834));
-  List<Quaternion> expectedOutput = <Quaternion>[];
+  var expectedOutput = <Quaternion>[];
   expectedOutput.add(Quaternion(-0.0, -0.0, -0.0, 1.0));
   expectedOutput.add(Quaternion(-0.18260, -0.54770, -0.73030, 0.36510));
   expectedOutput.add(Quaternion(-0.9889, -0.0, -0.0, 0.1483));
@@ -88,7 +88,7 @@
 }
 
 void testQuaternionMatrixQuaternionRoundTrip() {
-  List<Quaternion> input = <Quaternion>[];
+  var input = <Quaternion>[];
   input.add(Quaternion.identity()..normalize());
   input.add(Quaternion(0.18260, 0.54770, 0.73030, 0.36510)..normalize());
   input.add(Quaternion(0.9889, 0.0, 0.0, 0.14834)..normalize());
@@ -100,22 +100,22 @@
 }
 
 void testQuaternionMultiplying() {
-  List<Quaternion> inputA = <Quaternion>[];
+  var inputA = <Quaternion>[];
   inputA.add(Quaternion(0.18260, 0.54770, 0.73030, 0.36510));
   inputA.add(Quaternion(0.9889, 0.0, 0.0, 0.14834));
-  List<Quaternion> inputB = <Quaternion>[];
+  var inputB = <Quaternion>[];
   inputB.add(Quaternion(0.9889, 0.0, 0.0, 0.14834));
   inputB.add(Quaternion(0.18260, 0.54770, 0.73030, 0.36510));
-  List<Quaternion> expectedOutput = <Quaternion>[];
+  var expectedOutput = <Quaternion>[];
   expectedOutput.add(Quaternion(0.388127, 0.803418, -0.433317, -0.126429));
   expectedOutput.add(Quaternion(0.388127, -0.64097, 0.649924, -0.126429));
   testQuaternionMultiply(inputA, inputB, expectedOutput);
 }
 
 void testQuaternionNormalize() {
-  List<Quaternion> inputA = <Quaternion>[];
-  List<Vector3> inputB = <Vector3>[];
-  List<Vector3> expectedOutput = <Vector3>[];
+  var inputA = <Quaternion>[];
+  var inputB = <Vector3>[];
+  var expectedOutput = <Vector3>[];
 
   inputA.add(Quaternion(0.0, 1.0, 0.0, 1.0)..normalize());
   inputB.add(Vector3(1.0, 1.0, 1.0));
@@ -177,14 +177,14 @@
 void testQuaternionAxisAngle() {
   // Test conversion to and from axis-angle representation
   {
-    Quaternion q = Quaternion.axisAngle(Vector3(0.0, 1.0, 0.0), 0.5 * math.pi);
+    var q = Quaternion.axisAngle(Vector3(0.0, 1.0, 0.0), 0.5 * math.pi);
     relativeTest(q.radians, 0.5 * math.pi);
     relativeTest(q.axis, Vector3(0.0, 1.0, 0.0));
   }
 
   {
     // Degenerate test: 0-angle
-    Quaternion q = Quaternion.axisAngle(Vector3(1.0, 0.0, 0.0), 0.0);
+    var q = Quaternion.axisAngle(Vector3(1.0, 0.0, 0.0), 0.0);
     relativeTest(q.radians, 0.0);
   }
 }
@@ -192,25 +192,25 @@
 void testFromTwoVectors() {
   {
     // "Normal" test case
-    Vector3 a = Vector3(1.0, 0.0, 0.0);
-    Vector3 b = Vector3(0.0, 1.0, 0.0);
-    Quaternion q = Quaternion.fromTwoVectors(a, b);
+    var a = Vector3(1.0, 0.0, 0.0);
+    var b = Vector3(0.0, 1.0, 0.0);
+    var q = Quaternion.fromTwoVectors(a, b);
     relativeTest(q.radians, 0.5 * math.pi);
     relativeTest(q.axis, Vector3(0.0, 0.0, 1.0));
   }
   {
     // Degenerate null rotation
-    Vector3 a = Vector3(1.0, 0.0, 0.0);
-    Vector3 b = Vector3(1.0, 0.0, 0.0);
-    Quaternion q = Quaternion.fromTwoVectors(a, b);
+    var a = Vector3(1.0, 0.0, 0.0);
+    var b = Vector3(1.0, 0.0, 0.0);
+    var q = Quaternion.fromTwoVectors(a, b);
     relativeTest(q.radians, 0.0);
     // Axis can be arbitrary
   }
   {
     // Parallel vectors in opposite direction
-    Vector3 a = Vector3(1.0, 0.0, 0.0);
-    Vector3 b = Vector3(-1.0, 0.0, 0.0);
-    Quaternion q = Quaternion.fromTwoVectors(a, b);
+    var a = Vector3(1.0, 0.0, 0.0);
+    var b = Vector3(-1.0, 0.0, 0.0);
+    var q = Quaternion.fromTwoVectors(a, b);
     relativeTest(q.radians, math.pi);
   }
 }
diff --git a/test/scalar_list_view_test.dart b/test/scalar_list_view_test.dart
index b2d9319..c5df6bf 100644
--- a/test/scalar_list_view_test.dart
+++ b/test/scalar_list_view_test.dart
@@ -40,7 +40,7 @@
 }
 
 void testScalarListViewFromList() {
-  List<double> input = List<double>(3);
+  var input = List<double>(3);
   input[0] = 1.0;
   input[1] = 4.0;
   input[2] = 7.0;
diff --git a/test/test_utils.dart b/test/test_utils.dart
index 904360a..65300a1 100644
--- a/test/test_utils.dart
+++ b/test/test_utils.dart
@@ -48,17 +48,17 @@
 
 T parseMatrix<T>(String input) {
   input = input.trim();
-  List<String> rows = input.split("\n");
-  List<double> values = <double>[];
-  int col_count = 0;
-  for (int i = 0; i < rows.length; i++) {
+  var rows = input.split('\n');
+  var values = <double>[];
+  var col_count = 0;
+  for (var i = 0; i < rows.length; i++) {
     rows[i] = rows[i].trim();
-    List<String> cols = rows[i].split(" ");
-    for (int j = 0; j < cols.length; j++) {
+    var cols = rows[i].split(' ');
+    for (var j = 0; j < cols.length; j++) {
       cols[j] = cols[j].trim();
     }
 
-    for (int j = 0; j < cols.length; j++) {
+    for (var j = 0; j < cols.length; j++) {
       if (cols[j].isEmpty) {
         continue;
       }
@@ -70,8 +70,8 @@
   }
 
   dynamic m = makeMatrix(rows.length, col_count);
-  for (int j = 0; j < rows.length; j++) {
-    for (int i = 0; i < col_count; i++) {
+  for (var j = 0; j < rows.length; j++) {
+    for (var i = 0; i < col_count; i++) {
       m[m.index(j, i)] = values[j * col_count + i];
       //m[i][j] = values[j*col_count+i];
     }
@@ -83,9 +83,9 @@
 T parseVector<T extends Vector>(String v) {
   v = v.trim();
   Pattern pattern = RegExp('[\\s]+', multiLine: true, caseSensitive: false);
-  List<String> rows = v.split(pattern);
-  List<double> values = <double>[];
-  for (int i = 0; i < rows.length; i++) {
+  var rows = v.split(pattern);
+  var values = <double>[];
+  for (var i = 0; i < rows.length; i++) {
     rows[i] = rows[i].trim();
     if (rows[i].isEmpty) {
       continue;
diff --git a/test/vector2_list_test.dart b/test/vector2_list_test.dart
index 6fc957d..238b5a5 100644
--- a/test/vector2_list_test.dart
+++ b/test/vector2_list_test.dart
@@ -14,7 +14,7 @@
 import 'test_utils.dart';
 
 void testVector2ListWithOffset() {
-  Vector2List list = Vector2List(10, 1);
+  var list = Vector2List(10, 1);
   list[0] = Vector2(1.0, 2.0);
   relativeTest(list[0].x, 1.0);
   relativeTest(list[0].y, 2.0);
@@ -25,8 +25,8 @@
 }
 
 void testVector2ListView() {
-  Float32List buffer = Float32List(8);
-  Vector2List list = Vector2List.view(buffer, 1, 3);
+  var buffer = Float32List(8);
+  var list = Vector2List.view(buffer, 1, 3);
   // The list length should be (8 - 1) ~/ 3 == 2.
   expect(list.length, 2);
   list[0] = Vector2(1.0, 2.0);
@@ -42,8 +42,8 @@
 }
 
 void testVector2ListViewTightFit() {
-  Float32List buffer = Float32List(8);
-  Vector2List list = Vector2List.view(buffer, 2, 4);
+  var buffer = Float32List(8);
+  var list = Vector2List.view(buffer, 2, 4);
   // The list length should be (8 - 2) ~/ 2 == 2 as the stride of the last
   // element is negligible.
   expect(list.length, 2);
@@ -60,11 +60,11 @@
 }
 
 void testVector2ListFromList() {
-  List<Vector2> input = List<Vector2>(3);
+  var input = List<Vector2>(3);
   input[0] = Vector2(1.0, 2.0);
   input[1] = Vector2(3.0, 4.0);
   input[2] = Vector2(5.0, 6.0);
-  Vector2List list = Vector2List.fromList(input, 2, 5);
+  var list = Vector2List.fromList(input, 2, 5);
   expect(list.buffer.length, 17);
   expect(list.buffer[0], 0.0);
   expect(list.buffer[1], 0.0);
diff --git a/test/vector2_test.dart b/test/vector2_test.dart
index c5bfc0f..4298c81 100644
--- a/test/vector2_test.dart
+++ b/test/vector2_test.dart
@@ -50,7 +50,7 @@
   final Vector2 a = Vector2(5.0, 7.0);
   final Vector2 b = Vector2(3.0, 8.0);
 
-  Vector2 result = Vector2.zero();
+  var result = Vector2.zero();
 
   Vector2.min(a, b, result);
   expect(result.x, equals(3.0));
@@ -65,7 +65,7 @@
   final Vector2 a = Vector2(5.0, 7.0);
   final Vector2 b = Vector2(3.0, 8.0);
 
-  Vector2 result = Vector2.zero();
+  var result = Vector2.zero();
 
   Vector2.mix(a, b, 0.5, result);
   expect(result.x, equals(4.0));
@@ -89,15 +89,15 @@
 }
 
 void testVector2Postmultiplication() {
-  Matrix2 inputMatrix = Matrix2.rotation(.2);
-  Vector2 inputVector = Vector2(1.0, 0.0);
-  Matrix2 inputInv = Matrix2.copy(inputMatrix);
+  var inputMatrix = Matrix2.rotation(.2);
+  var inputVector = Vector2(1.0, 0.0);
+  var inputInv = Matrix2.copy(inputMatrix);
   inputInv.invert();
   // print("input $inputMatrix");
   // print("input $inputInv");
-  Vector2 resultOld = inputMatrix.transposed() * inputVector as Vector2;
-  Vector2 resultOldvInv = inputInv * inputVector as Vector2;
-  Vector2 resultNew = inputVector..postmultiply(inputMatrix);
+  var resultOld = inputMatrix.transposed() * inputVector as Vector2;
+  var resultOldvInv = inputInv * inputVector as Vector2;
+  var resultNew = inputVector..postmultiply(inputMatrix);
   expect(resultNew.x, equals(resultOld.x));
   expect(resultNew.y, equals(resultOld.y));
   //matrix inversion can introduce a small error
@@ -107,7 +107,7 @@
 void testVector2CrossProduct() {
   final Vector2 inputA = Vector2(0.417267069084370, 0.049654430325742);
   final Vector2 inputB = Vector2(0.944787189721646, 0.490864092468080);
-  double expectedOutputCross = inputA.x * inputB.y - inputA.y * inputB.x;
+  var expectedOutputCross = inputA.x * inputB.y - inputA.y * inputB.x;
   dynamic result;
   result = cross2(inputA, inputB);
   relativeTest(result, expectedOutputCross);
diff --git a/test/vector3_list_test.dart b/test/vector3_list_test.dart
index 61b19be..5ff6c45 100644
--- a/test/vector3_list_test.dart
+++ b/test/vector3_list_test.dart
@@ -14,7 +14,7 @@
 import 'test_utils.dart';
 
 void testVector3ListWithOffset() {
-  Vector3List list = Vector3List(10, 1);
+  var list = Vector3List(10, 1);
   list[0] = Vector3(1.0, 2.0, 3.0);
   relativeTest(list[0].x, 1.0);
   relativeTest(list[0].y, 2.0);
@@ -27,8 +27,8 @@
 }
 
 void testVector3ListView() {
-  Float32List buffer = Float32List(10);
-  Vector3List list = Vector3List.view(buffer, 1, 4);
+  var buffer = Float32List(10);
+  var list = Vector3List.view(buffer, 1, 4);
   // The list length should be (10 - 1) ~/ 4 == 2.
   expect(list.length, 2);
   list[0] = Vector3(1.0, 2.0, 3.0);
@@ -46,8 +46,8 @@
 }
 
 void testVector3ListViewTightFit() {
-  Float32List buffer = Float32List(10);
-  Vector3List list = Vector3List.view(buffer, 2, 5);
+  var buffer = Float32List(10);
+  var list = Vector3List.view(buffer, 2, 5);
   // The list length should be (10 - 2) ~/ 4 == 2 as the stride of the last
   // element is negligible.
   expect(list.length, 2);
@@ -66,11 +66,11 @@
 }
 
 void testVector3ListFromList() {
-  List<Vector3> input = List<Vector3>(3);
+  var input = List<Vector3>(3);
   input[0] = Vector3(1.0, 2.0, 3.0);
   input[1] = Vector3(4.0, 5.0, 6.0);
   input[2] = Vector3(7.0, 8.0, 9.0);
-  Vector3List list = Vector3List.fromList(input, 2, 5);
+  var list = Vector3List.fromList(input, 2, 5);
   expect(list.buffer.length, 17);
   expect(list.buffer[0], 0.0);
   expect(list.buffer[1], 0.0);
diff --git a/test/vector3_test.dart b/test/vector3_test.dart
index 135324f..7aec380 100644
--- a/test/vector3_test.dart
+++ b/test/vector3_test.dart
@@ -56,7 +56,7 @@
   final Vector3 a = Vector3(5.0, 7.0, -3.0);
   final Vector3 b = Vector3(3.0, 8.0, 2.0);
 
-  Vector3 result = Vector3.zero();
+  var result = Vector3.zero();
 
   Vector3.min(a, b, result);
   expect(result.x, equals(3.0));
@@ -73,7 +73,7 @@
   final Vector3 a = Vector3(5.0, 7.0, 3.0);
   final Vector3 b = Vector3(3.0, 8.0, 2.0);
 
-  Vector3 result = Vector3.zero();
+  var result = Vector3.zero();
 
   Vector3.mix(a, b, 0.5, result);
   expect(result.x, equals(4.0));
@@ -92,9 +92,9 @@
 }
 
 void testVector3DotProduct() {
-  List<Vector3> inputA = <Vector3>[];
-  List<Vector3> inputB = <Vector3>[];
-  List<double> expectedOutput = <double>[];
+  var inputA = <Vector3>[];
+  var inputB = <Vector3>[];
+  var expectedOutput = <double>[];
   inputA.add(parseVector<Vector3>('''0.417267069084370
                                      0.049654430325742
                                      0.902716109915281'''));
@@ -104,23 +104,23 @@
   expectedOutput.add(0.860258396944727);
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
-  for (int i = 0; i < inputA.length; i++) {
-    double output1 = dot3(inputA[i], inputB[i]);
-    double output2 = dot3(inputB[i], inputA[i]);
+  for (var i = 0; i < inputA.length; i++) {
+    var output1 = dot3(inputA[i], inputB[i]);
+    var output2 = dot3(inputB[i], inputA[i]);
     relativeTest(output1, expectedOutput[i]);
     relativeTest(output2, expectedOutput[i]);
   }
 }
 
 void testVector3Postmultiplication() {
-  Matrix3 inputMatrix =
+  var inputMatrix =
       (Matrix3.rotationX(.4)) * (Matrix3.rotationZ(.5)) as Matrix3;
-  Vector3 inputVector = Vector3(1.0, 2.0, 3.0);
-  Matrix3 inputInv = Matrix3.copy(inputMatrix);
+  var inputVector = Vector3(1.0, 2.0, 3.0);
+  var inputInv = Matrix3.copy(inputMatrix);
   inputInv.invert();
-  Vector3 resultOld = inputMatrix.transposed() * inputVector as Vector3;
-  Vector3 resultOldvInv = inputInv * inputVector as Vector3;
-  Vector3 resultNew = inputVector..postmultiply(inputMatrix);
+  var resultOld = inputMatrix.transposed() * inputVector as Vector3;
+  var resultOldvInv = inputInv * inputVector as Vector3;
+  var resultNew = inputVector..postmultiply(inputMatrix);
 
   expect(resultNew.x, equals(resultOld.x));
   expect(resultNew.y, equals(resultOld.y));
@@ -131,9 +131,9 @@
 }
 
 void testVector3CrossProduct() {
-  List<Vector3> inputA = <Vector3>[];
-  List<Vector3> inputB = <Vector3>[];
-  List<Vector3> expectedOutput = <Vector3>[];
+  var inputA = <Vector3>[];
+  var inputB = <Vector3>[];
+  var expectedOutput = <Vector3>[];
 
   inputA.add(parseVector<Vector3>('''0.417267069084370
                                      0.049654430325742
@@ -158,16 +158,16 @@
   assert(inputA.length == inputB.length);
   assert(inputB.length == expectedOutput.length);
 
-  for (int i = 0; i < inputA.length; i++) {
-    Vector3 output = Vector3.zero();
+  for (var i = 0; i < inputA.length; i++) {
+    var output = Vector3.zero();
     cross3(inputA[i], inputB[i], output);
     relativeTest(output, expectedOutput[i]);
   }
 
   {
-    Vector3 x = Vector3(1.0, 0.0, 0.0);
-    Vector3 y = Vector3(0.0, 1.0, 0.0);
-    Vector3 z = Vector3(0.0, 0.0, 1.0);
+    var x = Vector3(1.0, 0.0, 0.0);
+    var y = Vector3(0.0, 1.0, 0.0);
+    var z = Vector3(0.0, 0.0, 1.0);
     Vector3 output;
 
     output = x.cross(y);
diff --git a/test/vector4_list_test.dart b/test/vector4_list_test.dart
index f684dfa..8dc2ef9 100644
--- a/test/vector4_list_test.dart
+++ b/test/vector4_list_test.dart
@@ -14,7 +14,7 @@
 import 'test_utils.dart';
 
 void testVector4ListWithOffset() {
-  Vector4List list = Vector4List(12, 1);
+  var list = Vector4List(12, 1);
   list[0] = Vector4(1.0, 2.0, 3.0, 4.0);
   relativeTest(list[0].x, 1.0);
   relativeTest(list[0].y, 2.0);
@@ -29,8 +29,8 @@
 }
 
 void testVector4ListView() {
-  Float32List buffer = Float32List(12);
-  Vector4List list = Vector4List.view(buffer, 1, 5);
+  var buffer = Float32List(12);
+  var list = Vector4List.view(buffer, 1, 5);
   // The list length should be (12 - 1) ~/ 5 == 2.
   expect(list.length, 2);
   list[0] = Vector4(1.0, 2.0, 3.0, 4.0);
@@ -50,8 +50,8 @@
 }
 
 void testVector4ListViewTightFit() {
-  Float32List buffer = Float32List(12);
-  Vector4List list = Vector4List.view(buffer, 2, 5);
+  var buffer = Float32List(12);
+  var list = Vector4List.view(buffer, 2, 5);
   // The list length should be (12 - 2) ~/ 5 == 2 as the stride of the last
   // element is negligible.
   expect(list.length, 2);
@@ -72,11 +72,11 @@
 }
 
 void testVector4ListFromList() {
-  List<Vector4> input = List<Vector4>(3);
+  var input = List<Vector4>(3);
   input[0] = Vector4(1.0, 2.0, 3.0, 4.0);
   input[1] = Vector4(5.0, 6.0, 7.0, 8.0);
   input[2] = Vector4(9.0, 10.0, 11.0, 12.0);
-  Vector4List list = Vector4List.fromList(input, 2, 5);
+  var list = Vector4List.fromList(input, 2, 5);
   expect(list.buffer.length, 17);
   expect(list.buffer[0], 0.0);
   expect(list.buffer[1], 0.0);
diff --git a/test/vector4_test.dart b/test/vector4_test.dart
index 5762bbc..d916603 100644
--- a/test/vector4_test.dart
+++ b/test/vector4_test.dart
@@ -60,7 +60,7 @@
   final Vector4 a = Vector4(5.0, 7.0, -3.0, 10.0);
   final Vector4 b = Vector4(3.0, 8.0, 2.0, 2.0);
 
-  Vector4 result = Vector4.zero();
+  var result = Vector4.zero();
 
   Vector4.min(a, b, result);
   expect(result.x, equals(3.0));
@@ -79,7 +79,7 @@
   final Vector4 a = Vector4(5.0, 7.0, 3.0, 10.0);
   final Vector4 b = Vector4(3.0, 8.0, 2.0, 2.0);
 
-  Vector4 result = Vector4.zero();
+  var result = Vector4.zero();
 
   Vector4.mix(a, b, 0.5, result);
   expect(result.x, equals(4.0));