standard_statefulImageView<ChildData extends WithLangText, DDModel extends DropDownModel<ChildData, WithOffline?>> function

Widget standard_statefulImageView<ChildData extends WithLangText, DDModel extends DropDownModel<ChildData, WithOffline?>>(
  1. DDModel model,
  2. ChildData? data, {
  3. 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),
                        ),
                    ],
                  );
                });
          });
        })
        // ;
        // }),
        // ),
        );