dartlangeditorflutterflutter-appsflutter-examplesflutter-packageflutter-widgetquillquill-deltaquilljsreactquillrich-textrich-text-editorwysiwygwysiwyg-editor
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.
135 lines
4.0 KiB
135 lines
4.0 KiB
4 years ago
|
import 'package:flutter/material.dart';
|
||
|
import 'package:flutter/widgets.dart';
|
||
|
import 'package:tuple/tuple.dart';
|
||
|
|
||
|
class DefaultTextBlockStyle {
|
||
|
final TextStyle style;
|
||
|
|
||
|
final Tuple2<double, double> verticalSpacing;
|
||
|
|
||
|
final Tuple2<double, double> lineSpacing;
|
||
|
|
||
|
final BoxDecoration decoration;
|
||
|
|
||
|
DefaultTextBlockStyle(
|
||
|
this.style, this.verticalSpacing, this.lineSpacing, this.decoration);
|
||
|
}
|
||
|
|
||
|
class DefaultStyles {
|
||
|
final DefaultTextBlockStyle h1;
|
||
|
final DefaultTextBlockStyle h2;
|
||
|
final DefaultTextBlockStyle h3;
|
||
|
final DefaultTextBlockStyle paragraph;
|
||
|
final TextStyle bold;
|
||
|
final TextStyle italic;
|
||
|
final TextStyle underline;
|
||
|
final TextStyle strikeThrough;
|
||
|
final TextStyle link;
|
||
|
final DefaultTextBlockStyle lists;
|
||
|
final DefaultTextBlockStyle quote;
|
||
|
final DefaultTextBlockStyle code;
|
||
|
|
||
|
DefaultStyles(
|
||
|
this.h1,
|
||
|
this.h2,
|
||
|
this.h3,
|
||
|
this.paragraph,
|
||
|
this.bold,
|
||
|
this.italic,
|
||
|
this.underline,
|
||
|
this.strikeThrough,
|
||
|
this.link,
|
||
|
this.lists,
|
||
|
this.quote,
|
||
|
this.code);
|
||
|
|
||
|
static DefaultStyles getInstance(BuildContext context) {
|
||
|
ThemeData themeData = Theme.of(context);
|
||
|
DefaultTextStyle defaultTextStyle = DefaultTextStyle.of(context);
|
||
|
TextStyle baseStyle = defaultTextStyle.style.copyWith(
|
||
|
fontSize: 16.0,
|
||
|
height: 1.3,
|
||
|
);
|
||
|
Tuple2 baseSpacing = Tuple2(6.0, 10);
|
||
|
String fontFamily;
|
||
|
switch (themeData.platform) {
|
||
|
case TargetPlatform.iOS:
|
||
|
case TargetPlatform.macOS:
|
||
|
fontFamily = 'Menlo';
|
||
|
break;
|
||
|
case TargetPlatform.android:
|
||
|
case TargetPlatform.fuchsia:
|
||
|
case TargetPlatform.windows:
|
||
|
case TargetPlatform.linux:
|
||
|
fontFamily = 'Roboto Mono';
|
||
|
break;
|
||
|
default:
|
||
|
throw UnimplementedError();
|
||
|
}
|
||
|
|
||
|
return DefaultStyles(
|
||
|
DefaultTextBlockStyle(
|
||
|
defaultTextStyle.style.copyWith(
|
||
|
fontSize: 34.0,
|
||
|
color: defaultTextStyle.style.color.withOpacity(0.70),
|
||
|
height: 1.15,
|
||
|
fontWeight: FontWeight.w300,
|
||
|
),
|
||
|
Tuple2(16.0, 0.0),
|
||
|
Tuple2(0.0, 0.0),
|
||
|
null),
|
||
|
DefaultTextBlockStyle(
|
||
|
defaultTextStyle.style.copyWith(
|
||
|
fontSize: 24.0,
|
||
|
color: defaultTextStyle.style.color.withOpacity(0.70),
|
||
|
height: 1.15,
|
||
|
fontWeight: FontWeight.normal,
|
||
|
),
|
||
|
Tuple2(8.0, 0.0),
|
||
|
Tuple2(0.0, 0.0),
|
||
|
null),
|
||
|
DefaultTextBlockStyle(
|
||
|
defaultTextStyle.style.copyWith(
|
||
|
fontSize: 20.0,
|
||
|
color: defaultTextStyle.style.color.withOpacity(0.70),
|
||
|
height: 1.25,
|
||
|
fontWeight: FontWeight.w500,
|
||
|
),
|
||
|
Tuple2(8.0, 0.0),
|
||
|
Tuple2(0.0, 0.0),
|
||
|
null),
|
||
|
DefaultTextBlockStyle(baseStyle, baseSpacing, Tuple2(0.0, 0.0), null),
|
||
|
TextStyle(fontWeight: FontWeight.bold),
|
||
|
TextStyle(fontStyle: FontStyle.italic),
|
||
|
TextStyle(decoration: TextDecoration.underline),
|
||
|
TextStyle(decoration: TextDecoration.lineThrough),
|
||
|
TextStyle(
|
||
|
color: themeData.accentColor,
|
||
|
decoration: TextDecoration.underline,
|
||
|
),
|
||
|
DefaultTextBlockStyle(baseStyle, baseSpacing, Tuple2(0.0, 6.0), null),
|
||
|
DefaultTextBlockStyle(
|
||
|
TextStyle(color: baseStyle.color.withOpacity(0.6)),
|
||
|
baseSpacing,
|
||
|
Tuple2(6.0, 2.0),
|
||
|
BoxDecoration(
|
||
|
border: Border(
|
||
|
left: BorderSide(width: 4, color: Colors.grey.shade300),
|
||
|
),
|
||
|
)),
|
||
|
DefaultTextBlockStyle(
|
||
|
TextStyle(
|
||
|
color: Colors.blue.shade900.withOpacity(0.9),
|
||
|
fontFamily: fontFamily,
|
||
|
fontSize: 13.0,
|
||
|
height: 1.15,
|
||
|
),
|
||
|
baseSpacing,
|
||
|
Tuple2(0.0, 0.0),
|
||
|
BoxDecoration(
|
||
|
color: Colors.grey.shade50,
|
||
|
borderRadius: BorderRadius.circular(2),
|
||
|
)));
|
||
|
}
|
||
|
}
|