friend_dialog.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import 'dart:io';
  2. import 'dart:ui';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  6. import 'package:location/resource/assets.gen.dart';
  7. import 'package:location/resource/string.gen.dart';
  8. import 'package:location/utils/common_expand.dart';
  9. import 'package:location/utils/common_style.dart';
  10. import '../resource/colors.gen.dart';
  11. class AddFriendDialog {
  12. static final String _tag = 'AddFriendDialog';
  13. static void show(
  14. {required VoidCallback onAddClick,
  15. VoidCallback? onCloseClick,
  16. VoidCallback? onNotAddDismiss}) {
  17. bool isClickAdd = false;
  18. SmartDialog.show(
  19. tag: _tag,
  20. onDismiss: () {
  21. if (!isClickAdd) {
  22. onNotAddDismiss?.call();
  23. }
  24. },
  25. builder: (_) {
  26. return AddFriendDialogView(
  27. onAddClick: () {
  28. isClickAdd = true;
  29. onAddClick();
  30. },
  31. onCloseClick: onCloseClick);
  32. });
  33. }
  34. static void dismiss() {
  35. SmartDialog.dismiss(tag: _tag);
  36. }
  37. }
  38. class AddFriendDialogView extends Dialog {
  39. final VoidCallback onAddClick;
  40. final VoidCallback? onCloseClick;
  41. const AddFriendDialogView({
  42. super.key,
  43. required this.onAddClick,
  44. this.onCloseClick,
  45. });
  46. @override
  47. Widget build(BuildContext context) {
  48. return Container(
  49. width: 360.w,
  50. height: 400.w,
  51. decoration: BoxDecoration(
  52. image: DecorationImage(
  53. image: Assets.images.bgDialogAddFriend.provider(),
  54. fit: BoxFit.fill),
  55. ),
  56. child: Stack(
  57. children: [
  58. buildFriendTitleView(),
  59. buildAddFriendBtnView(),
  60. ],
  61. ),
  62. );
  63. }
  64. Widget buildFriendTitleView() {
  65. return Positioned(
  66. left: 45.w,
  67. top: 64.w,
  68. child: Column(
  69. crossAxisAlignment: CrossAxisAlignment.start,
  70. children: [
  71. Text(StringName.dialogAddFriendTitle,
  72. style: TextStyle(fontSize: 12.sp, color: '#7A6187'.color)),
  73. SizedBox(height: 4.w),
  74. Assets.images.imgDialogAddFriendTitle.image(width: 167.w)
  75. ],
  76. ),
  77. );
  78. }
  79. Widget buildAddFriendBtnView() {
  80. return Positioned(
  81. left: 55.w,
  82. right: 55.w,
  83. bottom: 10.w,
  84. child: Column(
  85. children: [
  86. GestureDetector(
  87. onTap: onAddFriendClick,
  88. child: Container(
  89. decoration: BoxDecoration(
  90. borderRadius: BorderRadius.circular(100.w),
  91. gradient: LinearGradient(colors: [
  92. '#7B7DFF'.color,
  93. '#6365FF'.color,
  94. ])),
  95. width: double.infinity,
  96. height: 44.w,
  97. child: Center(
  98. child: Text(
  99. Platform.isAndroid
  100. ? StringName.dialogAddFriendBtn
  101. : StringName.dialogAddFriendBtnIos,
  102. style: TextStyle(fontSize: 15.sp, color: Colors.white)),
  103. ),
  104. ),
  105. ),
  106. SizedBox(height: 3.w),
  107. GestureDetector(
  108. onTap: onNextTimeClick,
  109. child: Padding(
  110. padding: EdgeInsets.all(8.w),
  111. child: Text(
  112. StringName.dialogAddFriendNextTime,
  113. style: TextStyle(fontSize: 11.sp, color: ColorName.black40),
  114. ),
  115. ),
  116. )
  117. ],
  118. ),
  119. );
  120. }
  121. void onNextTimeClick() {
  122. onCloseClick?.call();
  123. AddFriendDialog.dismiss();
  124. }
  125. void onAddFriendClick() {
  126. onAddClick();
  127. AddFriendDialog.dismiss();
  128. }
  129. }