1. ホーム
  2. firebase

[解決済み] タイプ 'List<dynamic>' はタイプ 'List<Widget>' のサブタイプではありません。

2022-04-27 13:48:29

質問

私はFirestoreの例からコピーしたコードのスニペットがあります。

Widget _buildBody(BuildContext context) {
    return new StreamBuilder(
      stream: _getEventStream(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) return new Text('Loading...');
        return new ListView(
          children: snapshot.data.documents.map((document) {
            return new ListTile(
              title: new Text(document['name']),
              subtitle: new Text("Class"),
            );
          }).toList(),
        );
      },
    );
  }

しかし、このようなエラーが発生します。

type 'List<dynamic>' is not a subtype of type 'List<Widget>'

ここで何が問題なのか?

解決方法は?

ここでの問題は、予期せぬ方法で型推論が失敗することです。 解決策としては、型引数を map メソッドを使用します。

snapshot.data.documents.map<Widget>((document) {
  return new ListTile(
    title: new Text(document['name']),
    subtitle: new Text("Class"),
  );
}).toList()

より複雑な回答は、型が childrenList<Widget> のほうに情報が戻ってくることはありません。 map を呼び出すことができます。 これは map の後に toList であり、クロージャの戻り値にタイプ・アノテーションを付ける方法がないためです。