view.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import 'dart:math';
  2. import 'package:camera/camera.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:get/get.dart';
  5. import 'package:vitalapp/components/appbar.dart';
  6. import 'index.dart';
  7. import 'widgets/widgets.dart';
  8. // import 'package:video_player/video_player.dart';
  9. class IdCardScanPage extends GetView<IdCardScanController> {
  10. const IdCardScanPage({Key? key}) : super(key: key);
  11. @override
  12. Widget build(BuildContext context) {
  13. return GetBuilder<IdCardScanController>(
  14. init: IdCardScanController(),
  15. builder: (_) {
  16. return Scaffold(
  17. appBar: VAppBar(
  18. titleText: "身份证识别",
  19. ),
  20. body: SafeArea(
  21. child: Obx(
  22. () => controller.state.isCameraReady
  23. ? _buildCameraArea()
  24. : const Center(
  25. child: CircularProgressIndicator(
  26. valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
  27. ),
  28. ),
  29. ),
  30. ),
  31. );
  32. },
  33. );
  34. }
  35. Widget _buildCameraArea() {
  36. return Row(
  37. children: [
  38. // const IdCardInfo(),
  39. Expanded(
  40. child: ClipRRect(
  41. child: LayoutBuilder(builder: (context, constraints) {
  42. return Stack(
  43. children: <Widget>[
  44. OverflowBox(
  45. maxHeight: constraints.maxHeight,
  46. maxWidth: 2000,
  47. child: Container(
  48. color: Colors.black,
  49. child: Center(
  50. child: _cameraPreviewWidget(),
  51. ),
  52. ),
  53. ),
  54. const Center(
  55. child: CameraForIdCard(),
  56. ),
  57. const ImageDetectingDialog(),
  58. ],
  59. );
  60. }),
  61. ),
  62. ),
  63. ],
  64. );
  65. }
  66. /// 相机预览
  67. Widget _cameraPreviewWidget() {
  68. final CameraController? cameraController = controller.kCameraController;
  69. if (cameraController == null || !cameraController.value.isInitialized) {
  70. /// 旋转loading
  71. return const Center(
  72. child: CircularProgressIndicator(),
  73. );
  74. } else {
  75. return Transform.rotate(
  76. angle: controller.adjustCameraAngle(
  77. cameraController,
  78. cameraController.description,
  79. ) *
  80. pi /
  81. 180,
  82. child: Listener(
  83. onPointerDown: (_) => controller.pointers++,
  84. onPointerUp: (_) => controller.pointers--,
  85. child: CameraPreview(
  86. cameraController,
  87. child: LayoutBuilder(
  88. builder: (BuildContext context, BoxConstraints constraints) {
  89. return FittedBox(
  90. child: GestureDetector(
  91. behavior: HitTestBehavior.opaque,
  92. onScaleStart: controller.handleScaleStart,
  93. onScaleUpdate: controller.handleScaleUpdate,
  94. onTapDown: (TapDownDetails details) =>
  95. controller.onViewFinderTap(details, constraints),
  96. child: Container(),
  97. ),
  98. );
  99. },
  100. ),
  101. ),
  102. ),
  103. );
  104. }
  105. }
  106. }