我可以在Flutter中使用Void方法下的“FutureBuilder()”吗

jdg4fx2g  于 2022-11-30  发布在  Flutter
关注(0)|答案(2)|浏览(148)

这是我的代码

Future<void> SendOrderDetails() async{
  Row(
    children: [
      FutureBuilder(
      future: topcart.getData(),
        builder: (context, AsyncSnapshot<List<Cart>> snapshot) {
          for(int i = 0; i<itemcount; i++)
          {
            if(itemcount>listModel2.data!.length) {
              listModel2.data?.add(Model2(
                ORDER_INFO_ID: 1,
                PRODUCT_ED_ID: 2,
                QTY: quantitycalcule.toString(),
                UNIT_PRICE:'00',// snapshot.data![i].Book_initional_price!.toString(),
                CHGED_BY:1,
                CHGED_DATE: DateTime.now().toString(),
                STATUS: 'P',
              ),);
            }
          }
          return const Text('');
        }
       ),
    ],
   );
}

调用此函数时,“FutureBuilder”未运行。If条件中需要“快照”。请帮助我。

qmelpv7a

qmelpv7a1#

我不确定您的代码试图完成什么,但我可以看到有几件事可能会导致问题:
1.你在一个Future中调用FutureBuilder,而在你的Future中没有等待,所以它真的不会正常工作。
FutureBuilder的全部意义在于基于与Future交互的最新快照来构建自己。也许你可以解释为什么这种结构是这样的。

  1. getData()-不应该出现在未来的构建器中。
// This needs to be outside the build method, maybe initState()
Future<TYPE> _gd = topcart.get() 

// Future Builder in the build method
FutureBuilder<String>(
        future: _gd, 
        builder: (BuildContext context, AsyncSnapshot<TYPE> snapshot) {});

1.理想情况下,在FutureBuilder()中,您希望检查连接和数据,例如:

if (snapshot.connectionState == ConnectionState.waiting) {
      return // Progress indicator widget
    } else if (snapshot.connectionState == ConnectionState.done) {
      if (snapshot.hasError) {
        return // Error Widget or Text 
      } else if (snapshot.hasData) {
        return // Process data here
      } else {
        return // Empty set returned
      }
    } else {
      return Text('State: ${snapshot.connectionState}');
    }
cwtwac6a

cwtwac6a2#

这个方法什么都不返回,所以你没有办法检查未来的构建器是否运行,尝试使用打印和检查你的调试控制台(或尝试通过使用断点调试你的代码),如果它工作,然后做任何你想做的额外问题:您正在使用什么状态管理?

相关问题