protocol_overlay.dart 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:flutter_markdown/flutter_markdown.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:get/get.dart';
  6. import 'package:nomo/app/widgets/ix_image.dart';
  7. import 'package:nomo/app/widgets/submit_btn.dart';
  8. import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
  9. import '../constants/assets.dart';
  10. import '../routes/app_pages.dart';
  11. class ProtocolOverlay extends StatefulWidget {
  12. const ProtocolOverlay({super.key});
  13. @override
  14. State<ProtocolOverlay> createState() => _ProtocolOverlayState();
  15. }
  16. class _ProtocolOverlayState extends State<ProtocolOverlay> {
  17. @override
  18. Widget build(BuildContext context) {
  19. return WillPopScope(
  20. onWillPop: () async => false, // 禁止返回
  21. child: Scaffold(
  22. backgroundColor: Get.reactiveTheme.scaffoldBackgroundColor,
  23. body: SafeArea(
  24. child: Column(
  25. mainAxisAlignment: MainAxisAlignment.center,
  26. children: [
  27. Container(
  28. width: 80.w,
  29. height: 80.w,
  30. margin: EdgeInsets.only(top: 67.w),
  31. alignment: Alignment.center,
  32. decoration: BoxDecoration(
  33. color: Get.reactiveTheme.cardColor,
  34. borderRadius: BorderRadius.circular(12.r),
  35. ),
  36. child: IXImage(
  37. source: Assets.nomoLogo,
  38. width: 43.w,
  39. height: 49.w,
  40. sourceType: ImageSourceType.asset,
  41. ),
  42. ),
  43. 18.verticalSpaceFromWidth,
  44. IXImage(
  45. source: Assets.nomo,
  46. width: 104.w,
  47. height: 40.w,
  48. fit: BoxFit.fitWidth,
  49. sourceType: ImageSourceType.asset,
  50. ),
  51. 20.verticalSpaceFromWidth,
  52. Expanded(
  53. child: FutureBuilder(
  54. future: rootBundle.loadString('assets/md/privacy.md'),
  55. builder: (BuildContext context, AsyncSnapshot snapshot) {
  56. if (snapshot.connectionState == ConnectionState.done) {
  57. if (snapshot.hasData) {
  58. return Markdown(
  59. physics: const BouncingScrollPhysics(),
  60. data: snapshot.data,
  61. );
  62. }
  63. }
  64. return Center(
  65. child: SizedBox(
  66. width: 20.w,
  67. height: 20.w,
  68. child: CircularProgressIndicator(
  69. strokeWidth: 2,
  70. valueColor: AlwaysStoppedAnimation<Color>(
  71. Get.reactiveTheme.primaryColor,
  72. ),
  73. ),
  74. ),
  75. );
  76. },
  77. ),
  78. ),
  79. Padding(
  80. padding: EdgeInsets.symmetric(horizontal: 20, vertical: 6.w),
  81. child: SubmitButton(
  82. text: "Agree and continue",
  83. onPressed: () {
  84. Get.offAllNamed(Routes.HOME);
  85. },
  86. ),
  87. ),
  88. ],
  89. ),
  90. ),
  91. ),
  92. );
  93. }
  94. }