Unverified Commit ae9fdefa authored by Danny Tuppeny's avatar Danny Tuppeny Committed by GitHub

Fix example code just showing endless spinner when deployed from Windows (#14878)

* If example code is not found, render a message instead of an endless spinner
* Trim codeTags to avoid lookup issues with windows carriage returns
* Trim \r on Windows off the end of code blocks so they're consistently \n
* Add a test to ensure sample code parses if built on Windows
* Add a comment about why we trimRight()

Fixes #14820.
parent e0956cbd
...@@ -117,7 +117,7 @@ class FullScreenCodeDialogState extends State<FullScreenCodeDialog> { ...@@ -117,7 +117,7 @@ class FullScreenCodeDialogState extends State<FullScreenCodeDialog> {
getExampleCode(widget.exampleCodeTag, DefaultAssetBundle.of(context)).then<Null>((String code) { getExampleCode(widget.exampleCodeTag, DefaultAssetBundle.of(context)).then<Null>((String code) {
if (mounted) { if (mounted) {
setState(() { setState(() {
_exampleCode = code; _exampleCode = code ?? 'Example code not found';
}); });
} }
}); });
......
...@@ -33,7 +33,7 @@ Future<Null> _parseExampleCode(AssetBundle bundle) async { ...@@ -33,7 +33,7 @@ Future<Null> _parseExampleCode(AssetBundle bundle) async {
if (line.startsWith(_kStartTag)) { if (line.startsWith(_kStartTag)) {
// Starting a new code block. // Starting a new code block.
codeBlock = <String>[]; codeBlock = <String>[];
codeTag = line.substring(_kStartTag.length); codeTag = line.substring(_kStartTag.length).trim();
} else { } else {
// Just skipping the line. // Just skipping the line.
} }
...@@ -46,7 +46,9 @@ Future<Null> _parseExampleCode(AssetBundle bundle) async { ...@@ -46,7 +46,9 @@ Future<Null> _parseExampleCode(AssetBundle bundle) async {
codeTag = null; codeTag = null;
} else { } else {
// Add to the current block // Add to the current block
codeBlock.add(line); // trimRight() to remove any \r on Windows
// without removing any useful indentation
codeBlock.add(line.trimRight());
} }
} }
} }
......
...@@ -18,6 +18,9 @@ void main() { ...@@ -18,6 +18,9 @@ void main() {
final String codeSnippet1 = await getExampleCode('test_1', bundle); final String codeSnippet1 = await getExampleCode('test_1', bundle);
expect(codeSnippet1, 'test 1 0\ntest 1 1'); expect(codeSnippet1, 'test 1 0\ntest 1 1');
final String codeSnippet3 = await getExampleCode('test_2_windows_breaks', bundle);
expect(codeSnippet3, 'windows test 2 0\nwindows test 2 1');
}); });
} }
...@@ -32,6 +35,8 @@ test 0 1 ...@@ -32,6 +35,8 @@ test 0 1
test 1 0 test 1 0
test 1 1 test 1 1
// END // END
// START test_2_windows_breaks\r\nwindows test 2 0\r\nwindows test 2 1\r\n// END
'''; ''';
class TestAssetBundle extends AssetBundle { class TestAssetBundle extends AssetBundle {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment