styles.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_quill/flutter_quill.dart';
  3. import 'package:tuple/tuple.dart';
  4. import 'package:flowy_infra/theme.dart';
  5. DefaultStyles customStyles(BuildContext context) {
  6. const baseSpacing = Tuple2<double, double>(6, 0);
  7. final defaultTextStyle = DefaultTextStyle.of(context);
  8. final baseStyle = defaultTextStyle.style.copyWith(
  9. fontSize: 16,
  10. height: 1.3,
  11. );
  12. final theme = context.watch<AppTheme>();
  13. final themeData = theme.themeData;
  14. final fontFamily = makeFontFamily(themeData);
  15. return DefaultStyles(
  16. h1: DefaultTextBlockStyle(
  17. defaultTextStyle.style.copyWith(
  18. fontSize: 34,
  19. color: defaultTextStyle.style.color!.withOpacity(0.70),
  20. height: 1.15,
  21. fontWeight: FontWeight.w300,
  22. ),
  23. const Tuple2(16, 0),
  24. const Tuple2(0, 0),
  25. null),
  26. h2: DefaultTextBlockStyle(
  27. defaultTextStyle.style.copyWith(
  28. fontSize: 24,
  29. color: defaultTextStyle.style.color!.withOpacity(0.70),
  30. height: 1.15,
  31. fontWeight: FontWeight.normal,
  32. ),
  33. const Tuple2(8, 0),
  34. const Tuple2(0, 0),
  35. null),
  36. h3: DefaultTextBlockStyle(
  37. defaultTextStyle.style.copyWith(
  38. fontSize: 20,
  39. color: defaultTextStyle.style.color!.withOpacity(0.70),
  40. height: 1.25,
  41. fontWeight: FontWeight.w500,
  42. ),
  43. const Tuple2(8, 0),
  44. const Tuple2(0, 0),
  45. null),
  46. paragraph: DefaultTextBlockStyle(baseStyle, const Tuple2(10, 0), const Tuple2(0, 0), null),
  47. bold: const TextStyle(fontWeight: FontWeight.bold),
  48. italic: const TextStyle(fontStyle: FontStyle.italic),
  49. small: const TextStyle(fontSize: 12, color: Colors.black45),
  50. underline: const TextStyle(decoration: TextDecoration.underline),
  51. strikeThrough: const TextStyle(decoration: TextDecoration.lineThrough),
  52. inlineCode: TextStyle(
  53. color: Colors.blue.shade900.withOpacity(0.9),
  54. fontFamily: fontFamily,
  55. fontSize: 13,
  56. ),
  57. link: TextStyle(
  58. color: themeData.colorScheme.secondary,
  59. decoration: TextDecoration.underline,
  60. ),
  61. placeHolder: DefaultTextBlockStyle(
  62. defaultTextStyle.style.copyWith(
  63. fontSize: 20,
  64. height: 1.5,
  65. color: Colors.grey.withOpacity(0.6),
  66. ),
  67. const Tuple2(0, 0),
  68. const Tuple2(0, 0),
  69. null),
  70. lists: DefaultTextBlockStyle(baseStyle, baseSpacing, const Tuple2(0, 6), null),
  71. quote: DefaultTextBlockStyle(
  72. TextStyle(color: baseStyle.color!.withOpacity(0.6)),
  73. baseSpacing,
  74. const Tuple2(6, 2),
  75. BoxDecoration(
  76. border: Border(
  77. left: BorderSide(width: 4, color: Colors.grey.shade300),
  78. ),
  79. )),
  80. code: DefaultTextBlockStyle(
  81. TextStyle(
  82. color: Colors.blue.shade900.withOpacity(0.9),
  83. fontFamily: fontFamily,
  84. fontSize: 13,
  85. height: 1.15,
  86. ),
  87. baseSpacing,
  88. const Tuple2(0, 0),
  89. BoxDecoration(
  90. color: Colors.grey.shade50,
  91. borderRadius: BorderRadius.circular(2),
  92. )),
  93. indent: DefaultTextBlockStyle(baseStyle, baseSpacing, const Tuple2(0, 6), null),
  94. align: DefaultTextBlockStyle(baseStyle, const Tuple2(0, 0), const Tuple2(0, 0), null),
  95. leading: DefaultTextBlockStyle(baseStyle, const Tuple2(0, 0), const Tuple2(0, 0), null),
  96. sizeSmall: const TextStyle(fontSize: 10),
  97. sizeLarge: const TextStyle(fontSize: 18),
  98. sizeHuge: const TextStyle(fontSize: 22));
  99. }
  100. String makeFontFamily(ThemeData themeData) {
  101. String fontFamily;
  102. switch (themeData.platform) {
  103. case TargetPlatform.iOS:
  104. case TargetPlatform.macOS:
  105. fontFamily = 'Menlo';
  106. break;
  107. case TargetPlatform.android:
  108. case TargetPlatform.fuchsia:
  109. case TargetPlatform.windows:
  110. case TargetPlatform.linux:
  111. fontFamily = 'Roboto Mono';
  112. break;
  113. default:
  114. throw UnimplementedError();
  115. }
  116. return fontFamily;
  117. }