styles.dart 4.3 KB

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