signature.dart 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import 'package:get/get.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:vitalapp/components/button.dart';
  4. import 'package:vitalapp/pages/home/personal_center/controller.dart';
  5. class SignaturePage extends GetView<PersonalCenterController> {
  6. const SignaturePage({super.key});
  7. @override
  8. Widget build(BuildContext context) {
  9. return Column(
  10. mainAxisAlignment: MainAxisAlignment.center,
  11. children: [
  12. _buildPreview(),
  13. const SizedBox(height: 20),
  14. _buildOperateRow(),
  15. ],
  16. );
  17. }
  18. Widget _buildOperateRow() {
  19. return Row(
  20. mainAxisAlignment: MainAxisAlignment.center,
  21. children: [
  22. VButton(
  23. label: "签 名",
  24. onTap: controller.rewrite,
  25. ),
  26. SizedBox(width: 20),
  27. // SizedBox(
  28. // width: 120,
  29. // child: VButton(
  30. // label: "导 入",
  31. // onTap: controller.chooseImage,
  32. // ),
  33. // ),
  34. // SizedBox(width: 20),
  35. VButton(
  36. label: "清 空",
  37. onTap: controller.clear,
  38. ),
  39. ],
  40. );
  41. }
  42. Widget _buildPreview() {
  43. return Obx(() {
  44. final imageWidget = controller.state.signaturUrl != null
  45. ? _buildNetworkImagePreview()
  46. : _buildEmptyPreview();
  47. return Container(
  48. decoration: BoxDecoration(
  49. color: Colors.white,
  50. border: Border.all(color: Colors.grey),
  51. ),
  52. width: 420,
  53. height: 270,
  54. child: imageWidget,
  55. );
  56. });
  57. }
  58. Widget _buildNetworkImagePreview() {
  59. final url = controller.state.signaturUrl!;
  60. return Image.network(
  61. url,
  62. fit: BoxFit.contain,
  63. errorBuilder: (context, error, stackTrace) => _buildEmptyPreview(),
  64. );
  65. }
  66. Widget _buildEmptyPreview() {
  67. return Column(
  68. mainAxisAlignment: MainAxisAlignment.center,
  69. mainAxisSize: MainAxisSize.min,
  70. children: const [
  71. Icon(
  72. Icons.person_4_outlined,
  73. size: 56,
  74. ),
  75. SizedBox(height: 12),
  76. Text(
  77. "未设置",
  78. style: TextStyle(fontSize: 32),
  79. ),
  80. ],
  81. );
  82. }
  83. }