modal.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. * @Author: XianKaiQun
  3. * @Date: 2020-09-08 16:48:28
  4. * @LastEditors: XianKaiQun
  5. * @LastEditTime: 2020-10-27 11:06:38
  6. * @Description:
  7. */
  8. import 'package:flutter/material.dart';
  9. import 'package:wisdom_cli/wisdom_cli.dart';
  10. ///确认弹窗的基本视图样式
  11. class WModal extends StatelessWidget {
  12. const WModal({
  13. Key? key,
  14. this.header,
  15. this.content,
  16. this.iconTheme,
  17. this.headerStyle,
  18. this.bodyStyle,
  19. this.buttonTheme,
  20. this.footers,
  21. }) : super(key: key);
  22. final Widget? header;
  23. final Widget? content;
  24. final IconThemeData? iconTheme;
  25. final TextStyle? headerStyle;
  26. final TextStyle? bodyStyle;
  27. final ButtonThemeData? buttonTheme;
  28. final List<Widget>? footers;
  29. @override
  30. Widget build(BuildContext context) {
  31. final style = WTheme.of(context);
  32. final colorScheme = style.colorScheme;
  33. Widget? headerWidget = header;
  34. if (headerWidget != null) {
  35. headerWidget = DefaultTextStyle(
  36. style: TextStyle(
  37. fontSize: 18.pt,
  38. fontWeight: FontWeight.bold,
  39. color: colorScheme.text,
  40. ).merge(headerStyle),
  41. child: headerWidget,
  42. );
  43. headerWidget = IconTheme(
  44. data: IconTheme.of(context).copyWith(size: 18.pt).merge(iconTheme),
  45. child: headerWidget,
  46. );
  47. }
  48. Widget? contentWidget = content;
  49. if (contentWidget != null) {
  50. contentWidget = DefaultTextStyle(
  51. textAlign: TextAlign.center,
  52. style: TextStyle(
  53. fontSize: 16.pt,
  54. color: colorScheme.text,
  55. ).merge(headerStyle),
  56. child: contentWidget,
  57. );
  58. contentWidget = ConstrainedBox(
  59. constraints: BoxConstraints(
  60. minHeight: 30.pt,
  61. ),
  62. child: contentWidget,
  63. );
  64. }
  65. Widget footerWidget = Row(
  66. mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  67. children: footers!,
  68. );
  69. return Container(
  70. alignment: Alignment.center,
  71. color: Colors.black26,
  72. child: Material(
  73. color: Colors.white,
  74. borderRadius: BorderRadius.circular(20.pt),
  75. child: ButtonTheme.fromButtonThemeData(
  76. data: ButtonThemeData(
  77. height: 44.pt,
  78. textTheme: ButtonTextTheme.primary,
  79. ),
  80. child: Container(
  81. padding: EdgeInsets.all(20.pt),
  82. constraints: BoxConstraints(
  83. minWidth: 305.pt,
  84. maxWidth: 305.pt,
  85. minHeight: 150.pt,
  86. maxHeight: 400.pt,
  87. ),
  88. child: Column(
  89. mainAxisSize: MainAxisSize.min,
  90. children: [
  91. if (headerWidget != null) ...[
  92. headerWidget,
  93. SizedBox(height: 25.pt),
  94. ],
  95. if (contentWidget != null) ...[
  96. contentWidget,
  97. SizedBox(height: 25.pt),
  98. ],
  99. footerWidget,
  100. ],
  101. ),
  102. ),
  103. ),
  104. ),
  105. );
  106. }
  107. }