diff --git a/packages/file/CHANGELOG.md b/packages/file/CHANGELOG.md
index 0537523..b6749b7 100644
--- a/packages/file/CHANGELOG.md
+++ b/packages/file/CHANGELOG.md
@@ -1,3 +1,7 @@
+#### 5.0.5
+
+* Dart 2 fixes
+
 #### 5.0.4
 
 * Update SDK constraint to 2.0.0-dev.67.0, remove workaround in
diff --git a/packages/file/lib/src/backends/record_replay/codecs.dart b/packages/file/lib/src/backends/record_replay/codecs.dart
index 651be60..67236e7 100644
--- a/packages/file/lib/src/backends/record_replay/codecs.dart
+++ b/packages/file/lib/src/backends/record_replay/codecs.dart
@@ -549,6 +549,17 @@
   List<T> convert(List<S> input) => input.map(_delegate.convert).toList();
 }
 
+/// Converts a `List<S>` into a `List<T>` by casting it to the appropriate
+/// type. The list must contain only elements of type `T`, or a runtime error
+/// will be thrown.
+class CastList<S, T> extends Converter<List<S>, List<T>> {
+  /// Creates a new [CastList].
+  const CastList();
+
+  @override
+  List<T> convert(List<S> input) => input.cast<T>();
+}
+
 /// Converts a [List] of elements into a [Stream] of the same elements.
 class ToStream<T> extends Converter<List<T>, Stream<T>> {
   /// Creates a new [ToStream].
diff --git a/packages/file/lib/src/backends/record_replay/replay_directory.dart b/packages/file/lib/src/backends/record_replay/replay_directory.dart
index d444e8a..74473f5 100644
--- a/packages/file/lib/src/backends/record_replay/replay_directory.dart
+++ b/packages/file/lib/src/backends/record_replay/replay_directory.dart
@@ -23,9 +23,12 @@
         reviveDirectory.fuse(const ToFuture<Directory>());
     Converter<String, FileSystemEntity> reviveEntity =
         new ReviveFileSystemEntity(fileSystem);
-    Converter<List<String>, List<FileSystemEntity>> reviveEntities =
-        new ConvertElements<String, FileSystemEntity>(reviveEntity);
-    Converter<List<String>, Stream<FileSystemEntity>> reviveEntitiesAsStream =
+    Converter<List<dynamic>, List<String>> dynamicToString =
+        const CastList<dynamic, String>();
+    Converter<List<dynamic>, List<FileSystemEntity>> reviveEntities =
+        dynamicToString.fuse<List<FileSystemEntity>>(
+            new ConvertElements<String, FileSystemEntity>(reviveEntity));
+    Converter<List<dynamic>, Stream<FileSystemEntity>> reviveEntitiesAsStream =
         reviveEntities
             .fuse<Stream<FileSystemEntity>>(const ToStream<FileSystemEntity>());
 
diff --git a/packages/file/pubspec.yaml b/packages/file/pubspec.yaml
index 2082c4d..3a9de9d 100644
--- a/packages/file/pubspec.yaml
+++ b/packages/file/pubspec.yaml
@@ -1,5 +1,5 @@
 name: file
-version: 5.0.4
+version: 5.0.5
 authors:
 - Matan Lurey <matanl@google.com>
 - Yegor Jbanov <yjbanov@google.com>
diff --git a/packages/file/test/recording_test.dart b/packages/file/test/recording_test.dart
index d485cfa..03286fe 100644
--- a/packages/file/test/recording_test.dart
+++ b/packages/file/test/recording_test.dart
@@ -545,7 +545,7 @@
               recording.events,
               contains(invokesMethod('create')
                   .on(isDirectory)
-                  .withNoNamedArguments()
+                  .withNamedArgument('recursive', false)
                   .withResult(isDirectory)));
         });
 
@@ -555,7 +555,7 @@
               recording.events,
               contains(invokesMethod('createSync')
                   .on(isDirectory)
-                  .withNoNamedArguments()
+                  .withNamedArgument('recursive', false)
                   .withResult(isNull)));
         });
 
@@ -569,7 +569,8 @@
             recording.events,
             contains(invokesMethod('list')
                 .on(isDirectory)
-                .withNoNamedArguments()
+                .withNamedArgument('recursive', false)
+                .withNamedArgument('followLinks', true)
                 .withResult(hasLength(3))),
           );
         });
@@ -612,7 +613,7 @@
               recording.events,
               contains(invokesMethod('openRead')
                   .on(isFile)
-                  .withPositionalArguments(isEmpty)
+                  .withPositionalArguments([null, null])
                   .withNoNamedArguments()
                   .withResult(isList)));
           await recording.flush();
@@ -624,7 +625,7 @@
                 containsPair('type', 'invoke'),
                 containsPair('method', 'openRead'),
                 containsPair('object', matches(r'^RecordingFile@[0-9]+$')),
-                containsPair('positionalArguments', isEmpty),
+                containsPair('positionalArguments', [null, null]),
                 containsPair('namedArguments', isEmpty),
                 containsPair('result', matches(r'^![0-9]+.foo$')),
               ));
@@ -769,7 +770,7 @@
               recording.events,
               contains(invokesMethod('readAsLines')
                   .on(isFile)
-                  .withNoNamedArguments()
+                  .withNamedArgument('encoding', utf8)
                   .withResult(<String>['Hello', 'World'])));
           await recording.flush();
           List<Map<String, dynamic>> manifest = _loadManifest(recording);
@@ -782,7 +783,7 @@
                 containsPair('object', matches(r'^RecordingFile@[0-9]+$')),
                 containsPair('positionalArguments', isEmpty),
                 containsPair('result', matches(r'^![0-9]+.foo$')),
-                containsPair('namedArguments', isEmpty),
+                containsPair('namedArguments', {'encoding': 'utf-8'}),
               ));
           File file = _getRecordingFile(recording, manifest[1]['result']);
           expect(file, exists);
@@ -797,7 +798,7 @@
               recording.events,
               contains(invokesMethod('readAsLinesSync')
                   .on(isFile)
-                  .withNoNamedArguments()
+                  .withNamedArgument('encoding', utf8)
                   .withResult(<String>['Hello', 'World'])));
           await recording.flush();
           List<Map<String, dynamic>> manifest = _loadManifest(recording);
@@ -810,7 +811,7 @@
                 containsPair('object', matches(r'^RecordingFile@[0-9]+$')),
                 containsPair('positionalArguments', isEmpty),
                 containsPair('result', matches(r'^![0-9]+.foo$')),
-                containsPair('namedArguments', isEmpty),
+                containsPair('namedArguments', {'encoding': 'utf-8'}),
               ));
           File file = _getRecordingFile(recording, manifest[1]['result']);
           expect(file, exists);
