createDetailsForItemCallback function

VoidCallback createDetailsForItemCallback(
  1. BuildContext context,
  2. dynamic item,
  3. {List? relatedEntities,
  4. dynamic shareButtonHeroTag,
  5. Map queryParams = const {}}
)

Implementation

VoidCallback createDetailsForItemCallback(BuildContext context, var item,
    {List? relatedEntities, shareButtonHeroTag, Map queryParams = const {}}) {
  if (item is timeline_api.Entity) {
    item = item.data;
  }
  if (item is search_api.Content) {
    item = item.data;
  }
  if (item is timeline_api.Favorite) {
    item = item.data;
  }

  DetailParams? params = DetailParamsFactory.of(context)!.create(context, item);
  if (params != null) {
    return () {
      ContentRoutes.itemDetail
          .push(context: context, arguments: params, queryParams: {
        'section': RouteUrl.firstPathSegment(context),
        'id': item.id,
      });
    };
  }

  VoidCallback showInDialogIfLargeFormat(DetailParams params) {
    return () {
      ContentRoutes.itemDetail
          .push(context: context, arguments: params, queryParams: {
        'section': RouteUrl.firstPathSegment(context),
        'id': item.id,
      });
    };
  }

  VoidCallback onTap;
  if (item is timeline_api.Event) {
    onTap = () {
      ContentRoutes.eventDetails.push(context: context, arguments: item);
    };
  } else if (item is timeline_api.Wisdom) {
    if (isLargeFormatLayout(context)) {
      onTap = showInDialogIfLargeFormat(DetailParams(
          item: item,
          itemType: "Wisdom",
          screenTitle: "Wisdom",
          shareText: formatShareText(item),
          shareSubject: formatShareSubject(item, "Wisdom", item.title),
          title: (context) {
            return 'Quote by ${item.summary}';
          },
          content: (forceRefresh) {
            return Future<String>.value(item.content);
          }));
    } else {
      onTap = () {
        showModalBottomSheet(
          context: context,
          backgroundColor: Colors.transparent,
          builder: (BuildContext context) {
            return DailyWisdom(item: item);
          },
        );
      };
    }
  } else if (item is timeline_api.Image) {
    onTap = () {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) {
          return Gallery(
            galleryItems: [item],
            backgroundDecoration: const BoxDecoration(
              color: Colors.black,
            ),
            initialIndex: 0,
          );
        }),
      );
    };
  } else if (item is tag_api.Tag) {
    onTap = () {
      SearchRoutes.search
          .push(context: context, arguments: item, queryParams: queryParams);
    };
  } else {
    onTap = () {
      return;
    };
  }
  return onTap;
}