Migrate Utf8 and Utf16 to Opaque and remove Utf8.toString
diff --git a/lib/src/utf16.dart b/lib/src/utf16.dart
index b63d383..0bf8833 100644
--- a/lib/src/utf16.dart
+++ b/lib/src/utf16.dart
@@ -12,7 +12,7 @@
 ///
 /// [Utf16] is represented as a struct so that `Pointer<Utf16>` can be used in
 /// native function signatures.
-class Utf16 extends Struct {
+class Utf16 extends Opaque {
   /// Convert a [String] to a UTF-16 encoded zero-terminated C string.
   ///
   /// If [string] contains NULL characters, the converted string will be truncated
diff --git a/lib/src/utf8.dart b/lib/src/utf8.dart
index cf44f06..c42c0fa 100644
--- a/lib/src/utf8.dart
+++ b/lib/src/utf8.dart
@@ -20,7 +20,7 @@
 //
 // TODO(https://github.com/dart-lang/ffi/issues/4): No need to use
 // 'asTypedList' when Pointer operations are performant.
-class Utf8 extends Struct {
+class Utf8 extends Opaque {
   /// Returns the length of a zero-terminated string &mdash; the number of
   /// bytes before the first zero byte.
   static int strlen(Pointer<Utf8> string) {
@@ -63,7 +63,4 @@
     nativeString[units.length] = 0;
     return result.cast();
   }
-
-  @override
-  String toString() => fromUtf8(addressOf);
 }