Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
aa07d147
Commit
aa07d147
authored
Mar 04, 2017
by
Chris Bracken
Committed by
GitHub
Mar 04, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Declare locals final where not reassigned (flutter_markdown) (#8568)
parent
895f3e63
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
49 deletions
+49
-49
markdown_raw.dart
packages/flutter_markdown/lib/src/markdown_raw.dart
+29
-29
flutter_markdown_test.dart
packages/flutter_markdown/test/flutter_markdown_test.dart
+20
-20
No files found.
packages/flutter_markdown/lib/src/markdown_raw.dart
View file @
aa07d147
...
...
@@ -157,17 +157,17 @@ class _MarkdownBodyRawState extends State<MarkdownBodyRaw> {
}
void
_buildMarkdownCache
()
{
MarkdownStyleRaw
markdownStyle
=
config
.
markdownStyle
??
config
.
createDefaultStyle
(
context
);
SyntaxHighlighter
syntaxHighlighter
=
config
.
syntaxHighlighter
??
new
_DefaultSyntaxHighlighter
(
markdownStyle
.
code
);
final
MarkdownStyleRaw
markdownStyle
=
config
.
markdownStyle
??
config
.
createDefaultStyle
(
context
);
final
SyntaxHighlighter
syntaxHighlighter
=
config
.
syntaxHighlighter
??
new
_DefaultSyntaxHighlighter
(
markdownStyle
.
code
);
_linkHandler
?.
dispose
();
_linkHandler
=
new
_LinkHandler
(
config
.
onTapLink
);
// TODO: This can be optimized by doing the split and removing \r at the same time
List
<
String
>
lines
=
config
.
data
.
replaceAll
(
'
\r\n
'
,
'
\n
'
).
split
(
'
\n
'
);
md
.
Document
document
=
new
md
.
Document
();
final
List
<
String
>
lines
=
config
.
data
.
replaceAll
(
'
\r\n
'
,
'
\n
'
).
split
(
'
\n
'
);
final
md
.
Document
document
=
new
md
.
Document
();
_Renderer
renderer
=
new
_Renderer
();
final
_Renderer
renderer
=
new
_Renderer
();
_cachedBlocks
=
renderer
.
render
(
document
.
parseLines
(
lines
),
markdownStyle
,
syntaxHighlighter
,
_linkHandler
);
}
...
...
@@ -176,7 +176,7 @@ class _MarkdownBodyRawState extends State<MarkdownBodyRaw> {
@override
Widget
build
(
BuildContext
context
)
{
List
<
Widget
>
blocks
=
<
Widget
>[];
final
List
<
Widget
>
blocks
=
<
Widget
>[];
for
(
_Block
block
in
_cachedBlocks
)
{
blocks
.
add
(
block
.
build
(
context
));
}
...
...
@@ -220,8 +220,8 @@ class _Renderer implements md.NodeVisitor {
@override
void
visitText
(
md
.
Text
text
)
{
if
(
_currentBlock
!=
null
)
{
// ignore if no corresponding block
_MarkdownNodeList
topList
=
_currentBlock
.
stack
.
last
;
List
<
_MarkdownNode
>
top
=
topList
.
list
;
final
_MarkdownNodeList
topList
=
_currentBlock
.
stack
.
last
;
final
List
<
_MarkdownNode
>
top
=
topList
.
list
;
if
(
_currentBlock
.
tag
==
'pre'
)
top
.
add
(
...
...
@@ -243,7 +243,7 @@ class _Renderer implements md.NodeVisitor {
else
blockList
=
_currentBlock
.
subBlocks
;
_Block
newBlock
=
new
_Block
(
element
.
tag
,
element
.
attributes
,
_markdownStyle
,
new
List
<
String
>.
from
(
_listIndents
),
blockList
.
length
);
final
_Block
newBlock
=
new
_Block
(
element
.
tag
,
element
.
attributes
,
_markdownStyle
,
new
List
<
String
>.
from
(
_listIndents
),
blockList
.
length
);
blockList
.
add
(
newBlock
);
}
else
{
_LinkInfo
linkInfo
;
...
...
@@ -251,8 +251,8 @@ class _Renderer implements md.NodeVisitor {
linkInfo
=
_linkHandler
.
createLinkInfo
(
element
.
attributes
[
'href'
]);
}
TextStyle
style
=
_markdownStyle
.
styles
[
element
.
tag
]
??
const
TextStyle
();
List
<
_MarkdownNode
>
styleElement
=
<
_MarkdownNode
>[
new
_MarkdownNodeTextStyle
(
style
,
linkInfo
)];
final
TextStyle
style
=
_markdownStyle
.
styles
[
element
.
tag
]
??
const
TextStyle
();
final
List
<
_MarkdownNode
>
styleElement
=
<
_MarkdownNode
>[
new
_MarkdownNodeTextStyle
(
style
,
linkInfo
)];
_currentBlock
.
stack
.
add
(
new
_MarkdownNodeList
(
styleElement
));
}
return
true
;
...
...
@@ -265,7 +265,7 @@ class _Renderer implements md.NodeVisitor {
if
(
_isBlockTag
(
element
.
tag
))
{
if
(
_currentBlock
.
stack
.
isNotEmpty
)
{
_MarkdownNodeList
stackList
=
_currentBlock
.
stack
.
first
;
final
_MarkdownNodeList
stackList
=
_currentBlock
.
stack
.
first
;
_currentBlock
.
stack
=
stackList
.
list
;
_currentBlock
.
open
=
false
;
}
else
{
...
...
@@ -273,12 +273,12 @@ class _Renderer implements md.NodeVisitor {
}
}
else
{
if
(
_currentBlock
.
stack
.
length
>
1
)
{
_MarkdownNodeList
poppedList
=
_currentBlock
.
stack
.
last
;
List
<
_MarkdownNode
>
popped
=
poppedList
.
list
;
final
_MarkdownNodeList
poppedList
=
_currentBlock
.
stack
.
last
;
final
List
<
_MarkdownNode
>
popped
=
poppedList
.
list
;
_currentBlock
.
stack
.
removeLast
();
_MarkdownNodeList
topList
=
_currentBlock
.
stack
.
last
;
List
<
_MarkdownNode
>
top
=
topList
.
list
;
final
_MarkdownNodeList
topList
=
_currentBlock
.
stack
.
last
;
final
List
<
_MarkdownNode
>
top
=
topList
.
list
;
top
.
add
(
new
_MarkdownNodeList
(
popped
));
}
}
...
...
@@ -304,7 +304,7 @@ class _Renderer implements md.NodeVisitor {
if
(!
blocks
.
last
.
open
)
return
null
;
_Block
childBlock
=
_currentBlockInList
(
blocks
.
last
.
subBlocks
);
final
_Block
childBlock
=
_currentBlockInList
(
blocks
.
last
.
subBlocks
);
if
(
childBlock
!=
null
)
return
childBlock
;
...
...
@@ -377,7 +377,7 @@ class _Block {
Widget
contents
;
if
(
subBlocks
.
isNotEmpty
)
{
List
<
Widget
>
subWidgets
=
<
Widget
>[];
final
List
<
Widget
>
subWidgets
=
<
Widget
>[];
for
(
_Block
subBlock
in
subBlocks
)
{
subWidgets
.
add
(
subBlock
.
build
(
context
));
}
...
...
@@ -387,7 +387,7 @@ class _Block {
children:
subWidgets
);
}
else
{
TextSpan
span
=
_stackToTextSpan
(
new
_MarkdownNodeList
(
stack
));
final
TextSpan
span
=
_stackToTextSpan
(
new
_MarkdownNodeList
(
stack
));
contents
=
new
RichText
(
text:
span
);
if
(
listIndents
.
isNotEmpty
)
{
...
...
@@ -445,10 +445,10 @@ class _Block {
return
stack
.
textSpan
;
if
(
stack
is
_MarkdownNodeList
)
{
List
<
_MarkdownNode
>
list
=
stack
.
list
;
_MarkdownNodeTextStyle
styleNode
=
list
[
0
];
_LinkInfo
linkInfo
=
styleNode
.
linkInfo
;
TextStyle
style
=
styleNode
.
style
;
final
List
<
_MarkdownNode
>
list
=
stack
.
list
;
final
_MarkdownNodeTextStyle
styleNode
=
list
[
0
];
final
_LinkInfo
linkInfo
=
styleNode
.
linkInfo
;
final
TextStyle
style
=
styleNode
.
style
;
List
<
TextSpan
>
children
=
<
TextSpan
>[];
for
(
int
i
=
1
;
i
<
list
.
length
;
i
++)
{
...
...
@@ -461,7 +461,7 @@ class _Block {
children
=
null
;
}
TapGestureRecognizer
recognizer
=
linkInfo
?.
recognizer
;
final
TapGestureRecognizer
recognizer
=
linkInfo
?.
recognizer
;
return
new
TextSpan
(
style:
style
,
children:
children
,
recognizer:
recognizer
,
text:
text
);
}
...
...
@@ -478,14 +478,14 @@ class _Block {
}
Widget
_buildImage
(
BuildContext
context
,
String
src
)
{
List
<
String
>
parts
=
src
.
split
(
'#'
);
final
List
<
String
>
parts
=
src
.
split
(
'#'
);
if
(
parts
.
isEmpty
)
return
new
Container
();
String
path
=
parts
.
first
;
final
String
path
=
parts
.
first
;
double
width
;
double
height
;
if
(
parts
.
length
==
2
)
{
List
<
String
>
dimensions
=
parts
.
last
.
split
(
'x'
);
final
List
<
String
>
dimensions
=
parts
.
last
.
split
(
'x'
);
if
(
dimensions
.
length
==
2
)
{
width
=
double
.
parse
(
dimensions
[
0
]);
height
=
double
.
parse
(
dimensions
[
1
]);
...
...
@@ -510,13 +510,13 @@ class _LinkHandler {
MarkdownLinkCallback
onTapLink
;
_LinkInfo
createLinkInfo
(
String
href
)
{
TapGestureRecognizer
recognizer
=
new
TapGestureRecognizer
();
final
TapGestureRecognizer
recognizer
=
new
TapGestureRecognizer
();
recognizer
.
onTap
=
()
{
if
(
onTapLink
!=
null
)
onTapLink
(
href
);
};
_LinkInfo
linkInfo
=
new
_LinkInfo
(
href
,
recognizer
);
final
_LinkInfo
linkInfo
=
new
_LinkInfo
(
href
,
recognizer
);
links
.
add
(
linkInfo
);
return
linkInfo
;
...
...
packages/flutter_markdown/test/flutter_markdown_test.dart
View file @
aa07d147
...
...
@@ -12,7 +12,7 @@ void main() {
testWidgets
(
'Simple string'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
'Hello'
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectWidgetTypes
(
widgets
,
<
Type
>[
MarkdownBody
,
Column
,
Container
,
Padding
,
RichText
]);
_expectTextStrings
(
widgets
,
<
String
>[
'Hello'
]);
});
...
...
@@ -20,7 +20,7 @@ void main() {
testWidgets
(
'Header'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
'# Header'
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectWidgetTypes
(
widgets
,
<
Type
>[
MarkdownBody
,
Column
,
Container
,
Padding
,
RichText
]);
_expectTextStrings
(
widgets
,
<
String
>[
'Header'
]);
});
...
...
@@ -28,14 +28,14 @@ void main() {
testWidgets
(
'Empty string'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
''
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectWidgetTypes
(
widgets
,
<
Type
>[
MarkdownBody
,
Column
]);
});
testWidgets
(
'Ordered list'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
'1. Item 1
\n
1. Item 2
\n
2. Item 3'
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectTextStrings
(
widgets
,
<
String
>[
'1.'
,
'Item 1'
,
...
...
@@ -49,7 +49,7 @@ void main() {
testWidgets
(
'Unordered list'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
'- Item 1
\n
- Item 2
\n
- Item 3'
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectTextStrings
(
widgets
,
<
String
>[
'•'
,
'Item 1'
,
...
...
@@ -63,7 +63,7 @@ void main() {
testWidgets
(
'Scrollable wrapping'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
Markdown
(
data:
''
));
List
<
Widget
>
widgets
=
tester
.
allWidgets
.
toList
();
final
List
<
Widget
>
widgets
=
tester
.
allWidgets
.
toList
();
_expectWidgetTypes
(
widgets
.
take
(
2
),
<
Type
>[
Markdown
,
SingleChildScrollView
,
...
...
@@ -78,8 +78,8 @@ void main() {
testWidgets
(
'Links'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
Markdown
(
data:
'[Link Text](href)'
));
RichText
textWidget
=
tester
.
allWidgets
.
firstWhere
((
Widget
widget
)
=>
widget
is
RichText
);
TextSpan
span
=
textWidget
.
text
;
final
RichText
textWidget
=
tester
.
allWidgets
.
firstWhere
((
Widget
widget
)
=>
widget
is
RichText
);
final
TextSpan
span
=
textWidget
.
text
;
expect
(
span
.
children
[
0
].
recognizer
.
runtimeType
,
equals
(
TapGestureRecognizer
));
});
...
...
@@ -93,7 +93,7 @@ void main() {
for
(
String
mdLine
in
mdData
)
{
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
mdLine
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectTextStrings
(
widgets
,
<
String
>[
'Line 1'
,
'Line 2'
]);
}
});
...
...
@@ -102,7 +102,7 @@ void main() {
final
String
mdLine
=
'Line 1 <
\n\n
c < c c
\n\n
< Line 2'
;
await
tester
.
pumpWidget
(
new
MarkdownBody
(
data:
mdLine
));
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
final
Iterable
<
Widget
>
widgets
=
tester
.
allWidgets
;
_expectTextStrings
(
widgets
,
<
String
>[
'Line 1 <'
,
'c < c c'
,
'< Line 2'
]);
});
...
...
@@ -110,9 +110,9 @@ void main() {
await
tester
.
pumpWidget
(
new
Markdown
(
data:
'Data1'
));
_expectTextStrings
(
tester
.
allWidgets
,
<
String
>[
'Data1'
]);
String
stateBefore
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
final
String
stateBefore
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
await
tester
.
pumpWidget
(
new
Markdown
(
data:
'Data1'
));
String
stateAfter
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
final
String
stateAfter
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
expect
(
stateBefore
,
equals
(
stateAfter
));
await
tester
.
pumpWidget
(
new
Markdown
(
data:
'Data2'
));
...
...
@@ -120,22 +120,22 @@ void main() {
});
testWidgets
(
'Changing config - style'
,
(
WidgetTester
tester
)
async
{
ThemeData
theme
=
new
ThemeData
.
light
();
final
ThemeData
theme
=
new
ThemeData
.
light
();
MarkdownStyle
style1
=
new
MarkdownStyle
.
defaultFromTheme
(
theme
);
MarkdownStyle
style2
=
new
MarkdownStyle
.
largeFromTheme
(
theme
);
final
MarkdownStyle
style1
=
new
MarkdownStyle
.
defaultFromTheme
(
theme
);
final
MarkdownStyle
style2
=
new
MarkdownStyle
.
largeFromTheme
(
theme
);
await
tester
.
pumpWidget
(
new
Markdown
(
data:
'Test'
,
markdownStyle:
style1
));
String
stateBefore
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
final
String
stateBefore
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
await
tester
.
pumpWidget
(
new
Markdown
(
data:
'Test'
,
markdownStyle:
style2
));
String
stateAfter
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
final
String
stateAfter
=
WidgetsBinding
.
instance
.
renderViewElement
.
toStringDeep
();
expect
(
stateBefore
,
isNot
(
stateAfter
));
});
}
void
_expectWidgetTypes
(
Iterable
<
Widget
>
widgets
,
List
<
Type
>
expected
)
{
List
<
Type
>
actual
=
widgets
.
map
((
Widget
w
)
=>
w
.
runtimeType
).
toList
();
final
List
<
Type
>
actual
=
widgets
.
map
((
Widget
w
)
=>
w
.
runtimeType
).
toList
();
expect
(
actual
,
expected
);
}
...
...
@@ -143,8 +143,8 @@ void _expectTextStrings(Iterable<Widget> widgets, List<String> strings) {
int
currentString
=
0
;
for
(
Widget
widget
in
widgets
)
{
if
(
widget
is
RichText
)
{
TextSpan
span
=
widget
.
text
;
String
text
=
_extractTextFromTextSpan
(
span
);
final
TextSpan
span
=
widget
.
text
;
final
String
text
=
_extractTextFromTextSpan
(
span
);
expect
(
text
,
equals
(
strings
[
currentString
]));
currentString
+=
1
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment