在flutter完成一个之后执行for循环

问题描述 投票:0回答:1

服务器响应返回三个JSON数组,所有对象一个接一个地存储在数据库中,optionsGroupListattributesassignedattributes。在项目中我有三个表被命名为groupattributeassignedattribute。首先,我必须在组表中插入optionsGroupList的所有元素,我能够这样做,在第二个数组中我得到groupidattributeidattributename但在第二个表中我有4列有groupidattributeidattributenamegroupname,但是对于groupname,我必须通过组表中的组ID获取特定组的记录,但我的第二个循环首先执行,因此我无法获取组记录,因为循环仍然插入记录时间我的第二个循环在第一个完成之前已经开始,我的第二个表依赖于第一个,我的第三个表依赖于第二个,所以我需要在一个完成之后插入记录。有时它工作正常

{
    "result": 1,
    "data": "optionsList",
    "merchantid": "MER-07156",
    "optionsGroupList": [{
        "grouprowid": "3012",
        "groupname": "Color",
        "isrequired": "0"
    }],
    "attributes": [{
        "attributerowid": "20794",
        "grouprowid": "3012",
        "attributename": "Red",
        "weight": "0"
    }],
    "assignedattributes": [{
            "attributegrouprowid": "154577",
            "productrowid": "342702",
            "attributerowid": "20794",
            "subsku": "",
            "quantity": "0",
            "pricechange": "4"
        },
        {
            "attributegrouprowid": "154590",
            "productrowid": "354723467",
            "attributerowid": "20794",
            "subsku": "0",
            "quantity": "0",
            "pricechange": "0"
        }
    ]
}

我的第二个循环调试语句首先打印。

optionListService().then((onValue) async {
  if (onValue.result == 1) {

    //Loop 1
    for(int i=0;i<onValue.optionsGroupList.length;i++){
      _insertOption(onValue.optionsGroupList[i]);
    }

    //Loop 2
    for(int j=0;j<onValue.attributes.length;j++){
      debugPrint('Attribute Name:--${ onValue.attributes[j].attributename}');// this is printed first before first loop excuted
      List groupIdList=new List<Map<String,dynamic>>();
      groupIdList= await dbHelper.queryReadOption(onValue.attributes[j].grouprowid); // here i'm finding group name from group table but i think is executing first.

      if(groupIdList.length>0){

        _insertOptionAttribute(onValue.attributes[j],groupIdList[0][DatabaseHelper.columnGroupName],groupIdList[0][DatabaseHelper.columnIsRequired]);
      }

    }

    //Loop 3
  for(int i=0;i<onValue.assignedattributes.length;i++){

      String attr=onValue.assignedattributes[i].attributerowid;
      arrtIdList=new List<Map<String,dynamic>>();
      arrtIdList= await dbHelper.queryReadAttribute(attr);
      if(arrtIdList.length>0){

        _insertProductWithAttribute(
            onValue.assignedattributes[i],
            arrtIdList[0][DatabaseHelper.columnGroupId],
            arrtIdList[0][DatabaseHelper.columnGroupName],
            arrtIdList[0][DatabaseHelper.columnAttributeName],
            arrtIdList[0][DatabaseHelper.columnIsRequired],
            arrtIdList[0][DatabaseHelper.columnWeight]
        );
      }

    }}});}
android dart flutter
1个回答
0
投票

只需在链接的“then”块中添加第二个循环,然后在第一个块中返回“Value”变量。像这样:

optionListService().then((onValue) async {
    if (onValue.result == 1) {

        //Loop 1
        for(int i=0;i<onValue.optionsGroupList.length;i++){
            _insertOption(onValue.optionsGroupList[i]);
        }
    }

    return onValue;

}).then((onValue) {
    if (onValue.result == 1) {
        //Loop 2
        for(int j=0;j<onValue.attributes.length;j++){
            // some code
        }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.