【问题标题】:type 'Future<Null>' is not a subtype of type 'Widget' Problemtype 'Future<Null>' 不是 type 'Widget' 的子类型 问题
【发布时间】:2021-02-03 00:59:47
【问题描述】:

我的代码有问题而且我刚刚开始了解颤振我需要解决方案

错误:“未来”类型不是“小部件”类型的子类型

这是我的代码

  Widget build(BuildContext context) {
    return orderStatus ? Style1().showProgress() : buildContent();
  }

  Widget buildContent() => ListView.builder(
        padding: EdgeInsets.all(10.0),
        itemCount: orderModels.length,
        // ignore: unrelated_type_equality_checks
        itemBuilder: (context, index) => riders[index] == "NONE"
            ? processFoods[index] == "UserOrder"
                ? orderCards(globalModels, index)
                : Container()
            : riders[index] == "$nameRider"
                ? processFoods[index] == "Cooking"
                    ? routeToGPS(index)
                    : Container()
                : Container(),
      );


Future<Null> routeToGPS(int index) async {
    await Future.delayed(Duration(seconds: 3));
    MaterialPageRoute route = MaterialPageRoute(
      builder: (context) => NavGps(
        orderModel: orderModels[index],
      ),
    );
    Navigator.push(context, route);
  }
}

如果有不明白的地方可以要求解释谢谢帮助:D

【问题讨论】:

  • 您在ListView.builder 中使用了routeToGPS() 方法,该方法将Widget 作为输入。方法routeToGPS 的返回类型为Future&lt;Null&gt;,它不是Widget。这是导致问题的原因。

标签: flutter dart


【解决方案1】:

我现在找到了解决方案,谢谢@Akif 的建议

只需检查 initState 中的条件并对其进行一些延迟,以便将服务器的响应添加到变量

@override
  void initState() {
    findOrder();
    checkJobs();
    super.initState();
  }

  Timer checkJobs() {
    return Timer(Duration(seconds: 2), () {
    int count = orderModels.length;
    for (var i = 0; i < count; i++) {
      if (orderModels[i].rider == nameRider &&
          orderModels[i].process == "Cooking") {
        routeToGPS(i);
      }
    }
  });
  }

  @override
  Widget build(BuildContext context) {
    return orderStatus ? Style1().showProgress() : buildContent();
  }

  Widget buildContent() => ListView.builder(
        padding: EdgeInsets.all(10.0),
        itemCount: orderModels.length,
        // ignore: unrelated_type_equality_checks
        itemBuilder: (context, index) => riders[index] == "NONE"
            ? processFoods[index] == "UserOrder"
                ? orderCards(globalModels, index)
                : Container()
            // : riders[index] == "$nameRider"
            //     ? processFoods[index] == "Cooking" ? Container() : Container()
            : Container(),
      );
      
    Future<Widget> routeToGPS(int index) {
    MaterialPageRoute route = MaterialPageRoute(
      builder: (context) => NavGps(
        orderModel: orderModels[index],
      ),
    );
    Navigator.push(context, route);
  }

【讨论】:

    【解决方案2】:

    问题不止一个。首先,routeToGPS 返回 null。而您尝试将其用作小部件。它应该返回一个像这样的小部件:

         Future<Widget> routeToGPS(int index) 
    

    但是您想在其中更改当前页面。它不会转动任何小部件。您需要返回一个带有 onPress 功能的按钮小部件,该功能将您导航到预期的页面。

    【讨论】:

    • 问题是如果条件正确,我想自动更改页面
    • 这样不行。如果你需要这样的东西,你应该在 initState() 或 builder 方法下的其他地方检查它。
    • 好的,你可以接受并投票赞成答案:) stackoverflow.com/a/64441314/10659482
    • 当然!!对我这种初学者很有帮助。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2021-02-21
    • 2020-09-11
    • 2023-03-30
    • 2020-04-07
    • 2023-03-27
    相关资源
    最近更新 更多