styles.dart 4.4 KB

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