簡體   English   中英

為什么 dart 泛型類不能根據構造函數確定其類型

[英]Why can't a dart generic class determine its type based on constructor

我正在為我的 FutureBuilders 編寫自己的 MyFutureBuilder,每次都做同樣的事情(除了使用我為其指定單獨函數的快照數據)。

typedef MyFutureBuilderBuildFunction<T> = Widget Function(T snapshotData);

class MyFutureBuilder<T> extends StatefulWidget {
  final MyFutureBuilderBuildFunction<T> builder;
  final Future<T> future;

  MyFutureBuilder({this.future, @required this.builder})
      : assert(builder != null);

  @override
  State<StatefulWidget> createState() {
    return MyFutureBuilderState(future: future, builder: builder);
  }
}

class MyFutureBuilderState<T> extends State<MyFutureBuilder<T>> {
  MyFutureBuilderBuildFunction<T> builder;
  Future<T> future;

  MyFutureBuilderState({this.future, @required this.builder})
      : assert(builder != null);

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<T>(
      future: future,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return builder(snapshot.data);
        } else if (snapshot.hasError) {
          return Text('${snapshot.error}');
        }

        return Center(child: CircularProgressIndicator());
      },
    );
  }
}

當我實例化它時

Future<Article> _article;
MyFutureBuilder(
    future: _article,
    builder: (snapshotData) {

snapshotData 的類型是動態的,而不是Article 不能從_article,Future的類型中自動確定類型T嗎?

當我將類型單獨提供給 MyFutureBuilder 時(恕我直言,這是多余的)

Future<Article> _article;
MyFutureBuilder<Article>(
    future: _article,
    builder: (snapshotData) {

snapshotData 的類型當然是文章。

在第一個代碼中,您應該在使用之前將返回的 snapshotData 轉換為您需要的類型

Future<Article> _article;
MyFutureBuilder(
  future: _article,
  builder: (snapshotData) {
    Article article = snapshotData as Article;
  }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM