flutter - 颤振嵌套步进器小部件未更新
问题描述
我有一个嵌套的小部件,即使状态改变也不会更新。我试图覆盖 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'),
),
}
在 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();
},
),
}
感谢任何指导。
谢谢!