| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:flutter_screenutil/flutter_screenutil.dart';
- import 'package:get/get.dart';
- import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
- import '../../config/translations/strings_enum.dart';
- import '../constants/assets.dart';
- import '../widgets/ix_image.dart';
- import '../widgets/submit_btn.dart';
- enum RestrictedType {
- region, // 地区限制
- user, // 用户禁用
- device, // 设备限制
- network, // 网络限制
- }
- class CountryRestrictedOverlay extends StatelessWidget {
- final RestrictedType type;
- final VoidCallback? onPressed;
- const CountryRestrictedOverlay({
- super.key,
- this.type = RestrictedType.region,
- this.onPressed,
- });
- String get _title {
- switch (type) {
- case RestrictedType.network:
- return "Oops!";
- default:
- return "Sorry";
- }
- }
- String get _content {
- switch (type) {
- case RestrictedType.network:
- return "Something went wrong\nUnable to load data";
- default:
- return "Due to local laws and regulations, \nNOMOVPN services are not available in \nyour current region.";
- }
- }
- String get _iconAsset {
- switch (type) {
- case RestrictedType.network:
- return Assets.oops;
- default:
- return Assets.restricted;
- }
- }
- @override
- Widget build(BuildContext context) {
- return WillPopScope(
- onWillPop: () async => false, // 禁止返回
- child: Scaffold(
- backgroundColor: Get.reactiveTheme.scaffoldBackgroundColor,
- body: SafeArea(
- child: Stack(
- alignment: Alignment.center,
- children: [
- Padding(
- padding: EdgeInsets.all(20.w),
- child: SizedBox(
- width: double.maxFinite,
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- IXImage(
- source: _iconAsset,
- width: 200.w,
- height: 200.w,
- sourceType: ImageSourceType.asset,
- ),
- 30.verticalSpaceFromWidth,
- Text(
- _title,
- textAlign: TextAlign.center,
- style: TextStyle(
- fontSize: 24.sp,
- height: 1.4,
- fontWeight: FontWeight.w600,
- color: Get.reactiveTheme.primaryColor,
- ),
- ),
- 12.verticalSpaceFromWidth,
- Text(
- _content,
- textAlign: TextAlign.center,
- style: TextStyle(
- fontSize: 14.sp,
- height: 1.6,
- color: Get.reactiveTheme.hintColor,
- ),
- ),
- 40.verticalSpaceFromWidth,
- ],
- ),
- ),
- ),
- type == RestrictedType.network
- ? Positioned(
- bottom: 6.w,
- left: 20.w,
- right: 20.w,
- child: SubmitSvgButton(
- onPressed: onPressed ?? () => SystemNavigator.pop(),
- text: type == RestrictedType.network
- ? Strings.refresh.tr
- : Strings.exit.tr,
- svgPath: Assets.refersh,
- svgColor: Get.reactiveTheme.textTheme.bodyLarge!.color,
- bgColor: Get.reactiveTheme.cardColor,
- textColor: Get.reactiveTheme.textTheme.bodyLarge!.color,
- borderColor: Get.reactiveTheme.cardColor,
- ),
- )
- : const SizedBox.shrink(),
- ],
- ),
- ),
- ),
- );
- }
- }
|