permissionOverlay method

Widget permissionOverlay(
  1. BuildContext context
)

The overlay when the permission is limited.

Implementation

Widget permissionOverlay(BuildContext context) {
  final Size size = MediaQuery.sizeOf(context);
  final Widget closeButton = Container(
    margin: const EdgeInsetsDirectional.only(start: 16, top: 4),
    alignment: AlignmentDirectional.centerStart,
    child: IconButton(
      onPressed: () {
        Navigator.maybeOf(context)?.maybePop();
      },
      icon: const Icon(Icons.close),
      padding: EdgeInsets.zero,
      constraints: BoxConstraints.tight(const Size.square(32)),
      tooltip: MaterialLocalizations.of(context).closeButtonTooltip,
    ),
  );

  final Widget limitedTips = Padding(
    padding: const EdgeInsets.symmetric(horizontal: 30),
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ScaleText(
          textDelegate.unableToAccessAll,
          style: const TextStyle(fontSize: 22),
          textAlign: TextAlign.center,
          semanticsLabel: semanticsTextDelegate.unableToAccessAll,
        ),
        SizedBox(height: size.height / 30),
        ScaleText(
          textDelegate.accessAllTip,
          style: const TextStyle(fontSize: 18),
          textAlign: TextAlign.center,
          semanticsLabel: semanticsTextDelegate.accessAllTip,
        ),
      ],
    ),
  );

  final Widget goToSettingsButton = MaterialButton(
    elevation: 0,
    minWidth: size.width / 2,
    height: appBarItemHeight * 1.25,
    padding: const EdgeInsets.symmetric(horizontal: 24),
    color: themeColor,
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(5),
    ),
    onPressed: PhotoManager.openSetting,
    materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
    child: ScaleText(
      textDelegate.goToSystemSettings,
      style: const TextStyle(fontSize: 17),
      semanticsLabel: semanticsTextDelegate.goToSystemSettings,
    ),
  );

  final Widget accessLimitedButton = GestureDetector(
    onTap: () {
      permissionOverlayDisplay.value = false;
    },
    child: ScaleText(
      textDelegate.accessLimitedAssets,
      style: TextStyle(color: interactiveTextColor(context)),
      semanticsLabel: semanticsTextDelegate.accessLimitedAssets,
    ),
  );

  return ValueListenableBuilder2<PermissionState, bool>(
    firstNotifier: permission,
    secondNotifier: permissionOverlayDisplay,
    builder: (_, PermissionState ps, bool isDisplay, __) {
      if (ps.isAuth || !isDisplay) {
        return const SizedBox.shrink();
      }
      return Positioned.fill(
        child: Semantics(
          sortKey: const OrdinalSortKey(0),
          child: Container(
            padding: EdgeInsets.only(top: MediaQuery.paddingOf(context).top),
            color: context.theme.canvasColor,
            child: Column(
              children: <Widget>[
                closeButton,
                Expanded(child: limitedTips),
                goToSettingsButton,
                SizedBox(height: size.height / 18),
                accessLimitedButton,
                SizedBox(
                  height: math.max(
                    MediaQuery.paddingOf(context).bottom,
                    24.0,
                  ),
                ),
              ],
            ),
          ),
        ),
      );
    },
  );
}