【问题标题】:Future<Widget> can't be assigned to the list typeFuture<Widget> 不能分配给列表类型
【发布时间】:2021-11-13 07:56:33
【问题描述】:

这是我的代码的一部分。 我想调用搜索屏幕类并将“客户端”传递给它。 所以我在列表中调用了方法读取客户端而不是 SearchScreen。 当我必须在方法中删除未来时,我遇到了这个错误:

 The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type

当我必须在方法中使用未来时,我得到了这个:

error: The element type 'Future<dynamic>' can't be assigned to the list type 'Widget'. (list_element_type_not_assignable at

那么如何在导航栏的列表中调用搜索屏类呢?

   class MyNavigationBar extends StatefulWidget {
       Future<void> readClient() async{
      await initHiveForFlutter();
      final HttpLink httpLink = HttpLink("https://test.server.ir/graphql/");
      final AuthLink authLink = AuthLink(
        getToken: () async => 'Bearer <YOUR_PERSONAL_ACCESS_TOKEN>',
  );
  final Link link = authLink.concat(httpLink);
  ValueNotifier<GraphQLClient> client = ValueNotifier(
    GraphQLClient(
      link: link,
      cache: GraphQLCache(store:  HiveStore()),
    ),
  );
   runApp(SearchScreen(client: client));
}
  @override
  State<StatefulWidget> createState() {
    return _MyNavigationBar();
  }
}

这部分,在导航栏中有一个调用类的列表:

class _MyNavigationBar extends State<MyNavigationBar> {
  int _currentIndex = 0;
  List<Widget> _pages = [
    ExploreScreen(),
    MyNavigationBar().readClient()!,   // this
    LibraryScreen(),
    ProfileScreen(),
  ];

}

【问题讨论】:

  • 你能包括你的身体小部件吗?是否有任何特定原因要在未来运行您的应用程序`runApp(MaterialApp(home: app));`?
  • 我已经编辑过了。小部件只显示底部导航栏。
  • 为什么你使用runApp insidewidget 像runApp(SearchScreen(client: client));,有什么具体原因吗?
  • 只想调用 SearchScreen 并将客户端传递给它
  • 您可以使用 Navigator 代替 runApp

标签: flutter dart widget client future


【解决方案1】:

您在_pages 列表中添加了几个小部件(即您有一个List&lt;Widget&gt; 类型),这很好,但是当您尝试添加MyNavigationBar().readClient()! 时,嗯...这不是@ 987654324@!

您应该只将MyNavigationBar() 添加到该列表中,并最终在其他地方调用readClient()! 方法。

另外:您为什么在该呼叫中使用空检查运算符 (!)? readClient() 是不可为空的,所以 ! 操作符此时是无用的。

【讨论】:

  • 我想将“客户端”传递到搜索屏幕。搜索屏幕(客户端:客户端)
  • 但我不知道如何将客户端传递到搜索屏幕
  • 你应该看看状态管理解决方案。如果这是您第一次听到这个,请查看 Provider 及其更强大的兄弟 Riverpod。还有更复杂的解决方案,例如 BLoC,但我建议您在了解 Providers 后就坚持使用 Riverpod。
  • (github.com/siitaw/.../blob/main/main.dart) 。你能看看这个吗
  • 链接似乎包含一些点来代替实际链接,我无法点击?
猜你喜欢
  • 2021-05-20
  • 2022-11-30
  • 2019-12-06
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2021-07-06
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多