Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.9 KiB

1 year ago
1 year ago
1 year ago
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:shamsi_date/shamsi_date.dart';
  4. import 'package:sonnat/core/extensions/number_extension.dart';
  5. import 'package:sonnat/core/language/language_cubit.dart';
  6. import 'package:sonnat/core/utils/toast.dart';
  7. class DisableScrollEffect extends ScrollBehavior {
  8. @override
  9. Widget buildOverscrollIndicator(BuildContext context, Widget child, ScrollableDetails details) {
  10. return child;
  11. }
  12. }
  13. class Utils {
  14. Utils.privateConstructor();
  15. static final Utils instance = Utils.privateConstructor();
  16. factory Utils() {
  17. return instance;
  18. }
  19. void showToast(BuildContext? context, String? txt, {bool isError = true, ToastGravity gravity = ToastGravity.top}) {
  20. try {
  21. if (context == null) return;
  22. if (txt == null || txt.isEmpty) {
  23. if (isError == false) {
  24. return;
  25. }
  26. txt = 'خطا در برقراری ارتباط';
  27. }
  28. FToast fToast = FToast();
  29. fToast.init(context);
  30. Widget toast = Container(
  31. padding: const EdgeInsetsDirectional.all(16),
  32. decoration: BoxDecoration(
  33. borderRadius: BorderRadius.circular(8),
  34. color: isError ? Colors.red : Colors.lightBlue,
  35. ),
  36. child: Text(
  37. txt,
  38. style: const TextStyle(
  39. color: Colors.white,
  40. fontWeight: FontWeight.bold,
  41. ),
  42. ),
  43. );
  44. fToast.showToast(child: toast, gravity: gravity, toastDuration: const Duration(milliseconds: 1500));
  45. } catch (e) {
  46. assert(() {
  47. if (kDebugMode) {
  48. print(e);
  49. }
  50. return true;
  51. }());
  52. }
  53. }
  54. String showTimeInJalali(DateTime dateTime) {
  55. Jalali jalali = Jalali.fromDateTime(dateTime);
  56. return '${jalali.year}/${jalali.month}/${jalali.day}';
  57. }
  58. ThemeData getAppTheme(BuildContext context, CurrentLanguage language) {
  59. switch (language) {
  60. case CurrentLanguage.en:
  61. return ThemeData(
  62. scaffoldBackgroundColor: const Color(0xffE7E7F5),
  63. useMaterial3: true,
  64. );
  65. case CurrentLanguage.fa:
  66. return ThemeData(
  67. fontFamily: 'Vazir',
  68. scaffoldBackgroundColor: const Color(0xffE7E7F5),
  69. useMaterial3: true,
  70. );
  71. case CurrentLanguage.ar:
  72. return ThemeData(
  73. fontFamily: 'Cairo',
  74. useMaterial3: true,
  75. scaffoldBackgroundColor: const Color(0xffE7E7F5),
  76. );
  77. }
  78. }
  79. EdgeInsets allMargin(num? num) {
  80. return EdgeInsets.all(
  81. (num ?? 0).w,
  82. );
  83. }
  84. EdgeInsets singleMargin({num? top, num? right, num? bottom, num? left}) {
  85. return EdgeInsets.only(
  86. top: (top ?? 0).h,
  87. right: (right ?? 0).w,
  88. bottom: (bottom ?? 0).h,
  89. left: (left ?? 0).w,
  90. );
  91. }
  92. EdgeInsets symmetricMargin({horizontal, vertical}) {
  93. return EdgeInsets.symmetric(
  94. horizontal: (horizontal ?? 0).w,
  95. vertical: (vertical ?? 0).w,
  96. );
  97. }
  98. }