Flutter 颤振嵌套步进程序小部件未更新

Flutter 颤振嵌套步进程序小部件未更新,flutter,Flutter,我有一个嵌套的小部件,即使状态改变也不会更新。我试图覆盖didWidgetUpdate,但没有得到任何结果 但是,如果我循环执行这些步骤,按NEXT/PREV切换到另一个步骤并返回到之前的相同步骤,将显示更新的小部件 class ManageWidget extends StatefulWidget { Item_item; ManageWidget({Key key}) : super(key: key); @override _ManageWidgetState crea

我有一个嵌套的小部件,即使状态改变也不会更新。我试图覆盖didWidgetUpdate,但没有得到任何结果

但是,如果我循环执行这些步骤,按NEXT/PREV切换到另一个步骤并返回到之前的相同步骤,将显示更新的小部件

class ManageWidget extends StatefulWidget {
  Item_item;

  ManageWidget({Key key}) : super(key: key);

  @override
  _ManageWidgetState createState() => _ManageWidgetState();
}

class _ManageWidgetState extends StateMVC<ManageWidget> {

  @override
  void didUpdateWidget(ManageWidget oldWidget) {
    print('Updated');
    super.didUpdateWidget(oldWidget);
    if (widget._item != oldWidget._item) {
      print('Not same!');
      // NONE OF THIS PRINTS
    }
    super.didUpdateWidget(oldWidget);
  }

  Future removeImage(String photoId) async {
    bool res = await deletePhoto(photoId);
    print(widget._item.photos.length.toString());
    if (res){
      widget._item.photos.removeWhere((element) => element.id == photoId);
      setState(() {
      });
      print(widget._item.photos.length.toString());
      print('Removed');
    } else {
      print('Failed');
    }
  }

  void showFullScreenDialog({BuildContext context, dynamic item, String title}) {
    setState(() { widget._item = item; });
    List<Step> steps = [
Step(
          title: Text('PHOTOS'),
          isActive: true,
          state: StepState.editing,
          content:
          Form(
            key: key,
            child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 20),
            child: EditCarouselWidget(photos: widget._item.photos,
                    addPhoto: selectPhoto,
                    deletePhoto: removePhoto,
                    context: context)
        ),
          ),
        ),

Step(
          title: Text('DUMMY'),
          isActive: true,
          state: StepState.editing,
          content:
          Form(
            key: key,
            child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 20),
            child: Text('DUMMY'),
          ),
        )
];
    List<GlobalKey<FormState>> keys = [];
    steps.forEach((element) {
      GlobalKey<FormState> _key = new GlobalKey<FormState>();
      keys.add(_key);
    });

    showGeneralDialog(
      context: context,
      barrierColor: Colors.white.withOpacity(1),
      barrierDismissible: false,
      barrierLabel: "Dialog",
      transitionDuration: Duration(milliseconds: 400),
      pageBuilder: (_, __, ___) {
        return GenericDialog(item: item, onChanged: (){ onChanged(); }, steps: steps, keys: keys, title: title);
      },
    );

    print('Show');
  }

...
Widget.build:
                    MaterialButton(
                      onPressed: () {
                        showFullScreenDialog(context: context,
                          item: new Item(),
                          title: 'Add Item',
                        );
                      },
                      child: Text('Begin'),
                    ),

}
class ManageWidget扩展了StatefulWidget{
项目(u)项目;;
ManageWidget({Key}):超级(Key:Key);
@凌驾
_ManageWidgetState createState()=>\u ManageWidgetState();
}
类_ManageWidgetState扩展StateMVC{
@凌驾
void didUpdateWidget(ManageWidget oldWidget){
打印(“更新”);
super.didUpdateWidget(oldWidget);
if(小部件.\u项!=旧小部件.\u项){
打印(“不一样!”);
//这些都没有指纹
}
super.didUpdateWidget(oldWidget);
}
未来removeImage(字符串photoId)异步{
bool res=等待删除照片(照片ID);
打印(widget._item.photos.length.toString());
如果(res){
widget.\u item.photos.removehere((element)=>element.id==photoId);
设置状态(){
});
打印(widget._item.photos.length.toString());
打印(“删除”);
}否则{
打印(“失败”);
}
}
void showFullScreenDialog({BuildContext上下文,动态项,字符串标题}){
setState((){widget.\u item=item;});
列出步骤=[
台阶(
标题:文本(“照片”),
是的,
状态:StepState.editing,
内容:
形式(
钥匙:钥匙,
孩子:填充(
填充:常量边集。对称(水平:20),
子项:EditCarouseWidget(照片:小部件.\u item.photos,
addPhoto:selectPhoto,
deletePhoto:removePhoto,
上下文:上下文)
),
),
),
台阶(
标题:文本(“虚拟”),
是的,
状态:StepState.editing,
内容:
形式(
钥匙:钥匙,
孩子:填充(
填充:常量边集。对称(水平:20),
子项:文本('DUMMY'),
),
)
];
列表键=[];
steps.forEach((元素){
GlobalKey _key=new GlobalKey();
键。添加(_键);
});
显示通用对话框(
上下文:上下文,
背景色:颜色。白色。不透明度(1),
禁止:错误,
barrierLabel:“对话框”,
转换持续时间:持续时间(毫秒:400),
页面生成器:(\uuuuuuuuuuuuuuuuuuuuuuuuuu){
返回GenericDialog(项:项,onChanged:(){onChanged();},步骤:步骤,键:键,标题:标题);
},
);
打印(“显示”);
}
...
Widget.build:
材料按钮(
已按下:(){
showFullScreenDialog(上下文:上下文,
项:新项(),
标题:“添加项目”,
);
},
子项:文本('Begin'),
),
}
在GenericDialog中,我根据所传递的步骤构建了步进器

class GenericDialog extends StatefulWidget {
  dynamic item;
  VoidCallback onChanged;
  List<GlobalKey<FormState>> keys;
  dynamic steps;
  String title;

  GenericDialog({Key key, this.item, this.onChanged, this.steps, this.keys, this.title}) : super(key: key);

  @override
  _GenericDialogState createState() => _GenericDialogState();
}

class _GenericDialogState extends State<GenericDialog> {

...
Widget.build:
Stepper(
                        type: StepperType.horizontal,
                        steps: widget.steps,
                        currentStep: currentStep,
                        controlsBuilder: (BuildContext context, {VoidCallback onStepContinue, VoidCallback onStepCancel}) {
                          return SizedBox.shrink();
                        },
                      ),
}

class GenericDialog扩展StatefulWidget{
动态项目;
一经改变无效;
列出键;
动态步骤;
字符串标题;
GenericDialog({Key,this.item,this.onChanged,this.steps,this.keys,this.title}):超级(Key:Key);
@凌驾
_GenericDialogState createState()=>\u GenericDialogState();
}
类_GenericDialogState扩展状态{
...
Widget.build:
步进机(
类型:StepperType.horizontal,
步骤:widget.steps,
currentStep:currentStep,
controlsBuilder:(BuildContext上下文,{VoidCallback onStepContinue,VoidCallback onStepCancel}){
返回SizedBox.shrink();
},
),
}
感谢您的指导

谢谢大家!