diff --git a/script/configs/temp_exclude_excerpt.yaml b/script/configs/temp_exclude_excerpt.yaml
index 2dd229b184cf..3d39abc136bb 100644
--- a/script/configs/temp_exclude_excerpt.yaml
+++ b/script/configs/temp_exclude_excerpt.yaml
@@ -7,6 +7,5 @@
# https://github.com/flutter/flutter/issues/102679
- espresso
- in_app_purchase/in_app_purchase
-- mustache_template
- pointer_interceptor
- quick_actions/quick_actions
diff --git a/third_party/packages/mustache_template/CHANGELOG.md b/third_party/packages/mustache_template/CHANGELOG.md
index 634e9abae3cd..ff2cc81f9ce4 100644
--- a/third_party/packages/mustache_template/CHANGELOG.md
+++ b/third_party/packages/mustache_template/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 2.0.5
+
+* Adds example app demonstrating basic variable rendering, sections,
+ inverted sections, and lambdas.
+
+
## 2.0.4
* Fixes a broken README link to the Mustache manual.
diff --git a/third_party/packages/mustache_template/README.md b/third_party/packages/mustache_template/README.md
index cf4dab61e4e6..1d03eda6926c 100644
--- a/third_party/packages/mustache_template/README.md
+++ b/third_party/packages/mustache_template/README.md
@@ -7,28 +7,30 @@ See the [mustache manual](https://mustache.github.io/mustache.5.html) for detail
This library passes all [mustache specification](https://github.com/mustache/spec/tree/master/specs) tests.
## Example usage
+
+
```dart
import 'package:mustache_template/mustache_template.dart';
-main() {
- var source = '''
- {{# names }}
-
{{ lastname }}, {{ firstname }}
- {{/ names }}
- {{^ names }}
- No names.
- {{/ names }}
- {{! I am a comment. }}
- ''';
-
- var template = Template(source, name: 'template-filename.html');
-
- var output = template.renderString({'names': [
- {'firstname': 'Greg', 'lastname': 'Lowe'},
- {'firstname': 'Bob', 'lastname': 'Johnson'}
- ]});
-
- print(output);
+void main() {
+ var source = '''
+ {{# names }}
+ {{ lastname }}, {{ firstname }}
+ {{/ names }}
+ {{^ names }}
+ No names.
+ {{/ names }}
+ {{! I am a comment. }}
+ ''';
+
+ var template = Template(source, name: 'template-filename.html');
+
+ var output = template.renderString({'names': [
+ {'firstname': 'Greg', 'lastname': 'Lowe'},
+ {'firstname': 'Bob', 'lastname': 'Johnson'}
+ ]});
+
+ print(output);
}
```
@@ -53,55 +55,28 @@ By default all output from `{{variable}}` tags is html escaped, this behaviour c
## Nested paths
+
```dart
- var t = Template('{{ author.name }}');
- var output = template.renderString({'author': {'name': 'Greg Lowe'}});
+var t = Template('{{ author.name }}');
+var output = t.renderString({'author': {'name': 'Greg Lowe'}});
```
## Partials - example usage
+
```dart
-
var partial = Template('{{ foo }}', name: 'partial');
-var resolver = (String name) {
- if (name == 'partial-name') { // Name of partial tag.
- return partial;
- }
-};
+var resolver = (String name) => name == 'partial-name' ? partial : null;
var t = Template('{{> partial-name }}', partialResolver: resolver);
var output = t.renderString({'foo': 'bar'}); // bar
-
```
## Lambdas - example usage
-```dart
-var t = Template('{{# foo }}');
-var lambda = (_) => 'bar';
-t.renderString({'foo': lambda}); // bar
-```
-
-```dart
-var t = Template('{{# foo }}hidden{{/ foo }}');
-var lambda = (_) => 'shown';
-t.renderString('foo': lambda); // shown
-```
-
-```dart
-var t = Template('{{# foo }}oi{{/ foo }}');
-var lambda = (LambdaContext ctx) => '${ctx.renderString().toUpperCase()}';
-t.renderString({'foo': lambda}); // OI
-```
-
-```dart
-var t = Template('{{# foo }}{{bar}}{{/ foo }}');
-var lambda = (LambdaContext ctx) => '${ctx.renderString().toUpperCase()}';
-t.renderString({'foo': lambda, 'bar': 'pub'}); // PUB
-```
-
+
```dart
var t = Template('{{# foo }}{{bar}}{{/ foo }}');
var lambda = (LambdaContext ctx) => '${ctx.renderString().toUpperCase()}';
@@ -110,8 +85,9 @@ t.renderString({'foo': lambda, 'bar': 'pub'}); // PUB
In the following example `LambdaContext.renderSource(source)` re-parses the source string in the current context, this is the default behaviour in many mustache implementations. Since re-parsing the content is slow, and often not required, this library makes this step optional.
+
```dart
var t = Template('{{# foo }}{{bar}}{{/ foo }}');
var lambda = (LambdaContext ctx) => ctx.renderSource(ctx.source + ' {{cmd}}');
t.renderString({'foo': lambda, 'bar': 'pub', 'cmd': 'build'}); // pub build
-```
+```
\ No newline at end of file
diff --git a/third_party/packages/mustache_template/example/main.dart b/third_party/packages/mustache_template/example/main.dart
new file mode 100644
index 000000000000..c741dc3e216d
--- /dev/null
+++ b/third_party/packages/mustache_template/example/main.dart
@@ -0,0 +1,57 @@
+// ignore_for_file: avoid_print
+
+import 'package:mustache_template/mustache_template.dart';
+
+// #docregion basic-usage
+void main() {
+ var source = '''
+ {{# names }}
+ {{ lastname }}, {{ firstname }}
+ {{/ names }}
+ {{^ names }}
+ No names.
+ {{/ names }}
+ {{! I am a comment. }}
+ ''';
+
+ var template = Template(source, name: 'template-filename.html');
+
+ var output = template.renderString({'names': [
+ {'firstname': 'Greg', 'lastname': 'Lowe'},
+ {'firstname': 'Bob', 'lastname': 'Johnson'}
+ ]});
+
+ print(output);
+ // #enddocregion basic-usage
+
+ // #docregion nested-paths
+ var t = Template('{{ author.name }}');
+ var nestedOutput = t.renderString({'author': {'name': 'Greg Lowe'}});
+ print(nestedOutput);
+ // #enddocregion nested-paths
+
+ // #docregion partials
+ var partial = Template('{{ foo }}', name: 'partial');
+
+ var resolver = (String name) => name == 'partial-name' ? partial : null;
+
+ var pt = Template('{{> partial-name }}', partialResolver: resolver);
+
+ var partialOutput = pt.renderString({'foo': 'bar'}); // bar
+ print(partialOutput);
+ // #enddocregion partials
+
+ // #docregion lambdas
+ var lt = Template('{{# foo }}{{bar}}{{/ foo }}');
+ var lambda = (LambdaContext ctx) => '${ctx.renderString().toUpperCase()}';
+ print(lt.renderString({'foo': lambda, 'bar': 'pub'})); // PUB
+ // #enddocregion lambdas
+
+ // #docregion lambda-render-source
+ var rst = Template('{{# foo }}{{bar}}{{/ foo }}');
+ var renderSourceLambda = (LambdaContext ctx) =>
+ ctx.renderSource(ctx.source + ' {{cmd}}');
+ print(rst.renderString(
+ {'foo': renderSourceLambda, 'bar': 'pub', 'cmd': 'build'})); // pub build
+ // #enddocregion lambda-render-source
+}
\ No newline at end of file
diff --git a/third_party/packages/mustache_template/example/pubspec.yaml b/third_party/packages/mustache_template/example/pubspec.yaml
new file mode 100644
index 000000000000..6b991c7089ff
--- /dev/null
+++ b/third_party/packages/mustache_template/example/pubspec.yaml
@@ -0,0 +1,10 @@
+name: mustache_template_example
+description: Example for mustache_template package.
+publish_to: none
+
+environment:
+ sdk: ^3.9.0
+
+dependencies:
+ mustache_template:
+ path: ../
\ No newline at end of file
diff --git a/third_party/packages/mustache_template/pubspec.yaml b/third_party/packages/mustache_template/pubspec.yaml
index 8a8bdeae8b94..e1c0175143a4 100644
--- a/third_party/packages/mustache_template/pubspec.yaml
+++ b/third_party/packages/mustache_template/pubspec.yaml
@@ -2,7 +2,7 @@ name: mustache_template
description: A templating library that implements the Mustache template specification
repository: https://github.com/flutter/packages/tree/main/third_party/packages/mustache_template
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+mustache_template%22
-version: 2.0.4
+version: 2.0.5
environment:
sdk: ^3.9.0