mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
56 lines
1.5 KiB
Dart
56 lines
1.5 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:flutter/services.dart';
|
|
|
|
const String _kStartTag = '// START ';
|
|
const String _kEndTag = '// END';
|
|
|
|
Map<String, String> _exampleCode;
|
|
|
|
Future<String> getExampleCode(String tag, AssetBundle bundle) async {
|
|
if (_exampleCode == null)
|
|
await _parseExampleCode(bundle);
|
|
return _exampleCode[tag];
|
|
}
|
|
|
|
Future<void> _parseExampleCode(AssetBundle bundle) async {
|
|
final String code = await bundle.loadString('lib/gallery/example_code.dart') ??
|
|
'// lib/gallery/example_code.dart not found\n';
|
|
_exampleCode = <String, String>{};
|
|
|
|
final List<String> lines = code.split('\n');
|
|
|
|
List<String> codeBlock;
|
|
String codeTag;
|
|
|
|
for (final String line in lines) {
|
|
if (codeBlock == null) {
|
|
// Outside a block.
|
|
if (line.startsWith(_kStartTag)) {
|
|
// Starting a new code block.
|
|
codeBlock = <String>[];
|
|
codeTag = line.substring(_kStartTag.length).trim();
|
|
} else {
|
|
// Just skipping the line.
|
|
}
|
|
} else {
|
|
// Inside a block.
|
|
if (line.startsWith(_kEndTag)) {
|
|
// Add the block.
|
|
_exampleCode[codeTag] = codeBlock.join('\n');
|
|
codeBlock = null;
|
|
codeTag = null;
|
|
} else {
|
|
// Add to the current block
|
|
// trimRight() to remove any \r on Windows
|
|
// without removing any useful indentation
|
|
codeBlock.add(line.trimRight());
|
|
}
|
|
}
|
|
}
|
|
}
|