iOSPermissionOverlay method

Widget iOSPermissionOverlay(
  1. BuildContext context
)

The overlay when the permission is limited on iOS.

Implementation

Widget iOSPermissionOverlay(BuildContext context) {
  final Size size = context.mediaQuery.size;
  final Widget _closeButton = Container(
    margin: const EdgeInsetsDirectional.only(start: 16, top: 4),
    alignment: AlignmentDirectional.centerStart,
    child: IconButton(
      onPressed: Navigator.of(context).maybePop,
      icon: const Icon(Icons.close),
      padding: EdgeInsets.zero,
      constraints: BoxConstraints.tight(const Size.square(32)),
    ),
  );

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

  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),
    ),
    child: ScaleText(
      Constants.textDelegate.goToSystemSettings,
      style: const TextStyle(fontSize: 17),
    ),
    onPressed: PhotoManager.openSetting,
    materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
  );

  final Widget _accessLimitedButton = GestureDetector(
    onTap: () => permissionOverlayHidden.value = true,
    child: ScaleText(
      Constants.textDelegate.accessLimitedAssets,
      style: TextStyle(color: interactiveTextColor(context)),
    ),
  );

  return ValueListenableBuilder2<PermissionState, bool>(
    firstNotifier: permission,
    secondNotifier: permissionOverlayHidden,
    builder: (_, PermissionState ps, bool isHidden, __) {
      if (ps.isAuth || isHidden) {
        return const SizedBox.shrink();
      }
      return Positioned.fill(
        child: Container(
          padding: context.mediaQuery.padding,
          color: context.themeData.canvasColor,
          child: Column(
            children: <Widget>[
              _closeButton,
              Expanded(child: _limitedTips),
              _goToSettingsButton,
              SizedBox(height: size.height / 18),
              _accessLimitedButton,
            ],
          ),
        ),
      );
    },
  );
}