signature.dart 2.3 KB

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