standard_statefulImageView<ChildData extends WithLangText, DDModel extends DropDownModel<ChildData, WithOffline?>> function
Widget
standard_statefulImageView<ChildData extends WithLangText, DDModel extends DropDownModel<ChildData, WithOffline?>>( - DDModel model,
- ChildData? data, {
- bool addImgIntent = false,
})
Implementation
Widget standard_statefulImageView<ChildData extends WithLangText,
DDModel extends DropDownModel<ChildData, WithOffline?>>(
DDModel model, ChildData? data,
{bool addImgIntent = false}) =>
ChangeNotifierProvider<DDModel>.value(
value: model,
// child: ChangeNotifierProvider<ChildData>.value(
// value: data,
child: Builder(builder: (context) {
return Consumer<DDModel>(builder: (context, model, child) {
// return Consumer<ChildData>(builder: (context, data, child) {
return FutureBuilder<ChildData?>(
future: model.currentlyChosenChildData,
builder: (context, snapshot) {
var hasMain = snapshot.data?.mainImage != null &&
(snapshot.data!.mainhash ??
Options().no_image_placeholder_name) !=
Options().no_image_placeholder_name;
return Stack(
children: [
ImagesPage.futured(
intendsToAddPicture: addImgIntent,
hasMainImage: hasMain,
futureImages: [
if (hasMain) snapshot.data!.mainImage,
...?((snapshot.data ?? data)?.imageFutures)
],
onNewImages: (files) async {
showToast(
S.of(context).newImageSendingThisMayTakeASec);
var value = await model.updateCurrentChild(
(data) async {
var ret = await API().uploadNewImagesOrFiles(
data, files,
caller: model.currentData, forceUpdate: true);
// await Future.delayed(Duration(seconds: 5));
return ret;
},
);
_maybeShowToast(value);
return value;
},
onStar: (hash) {
showToast(
S.of(context).settingMainImageThisMayTakeASec);
model
.updateCurrentChild((data) => API()
.setMainImageByHash(data, hash.toString(),
caller: model.currentData,
forceUpdate: true))
.then((value) {
_maybeShowToast(value);
return value;
});
},
onDelete: (hash) {
showToast(S.of(context).deletingImageThisMayTakeASec);
model
.updateCurrentChild((data) => API()
.deleteImageByHash(data, hash.toString(),
caller: model.currentData,
forceUpdate: true))
.then((value) {
_maybeShowToast(value);
return value;
});
},
onShare: (hash) async {
var files = await Future.wait(
[await localFile(hash.toString())]
.map(
(e) async => XFile.fromData(
Uint8List.fromList(
imglib.encodePng(
imglib.decodeImage(
await e.readAsBytes())!,
),
),
name:
'mbg_${hash.hashCode.toRadixString(36)}.png',
mimeType: 'image/png',
),
)
.toList());
await Share.shareXFiles(files, text: 'Internes Bild');
},
),
if (snapshot.connectionState == ConnectionState.waiting)
Card(
child:
Text(S.of(context).pleaseWaitDataIsBeeingSynced),
),
],
);
});
});
})
// ;
// }),
// ),
);