styles.dart 4.2 KB

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