diff --git a/CHANGELOG.md b/CHANGELOG.md index 16e3145..140e55f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,4 +26,5 @@ ## 1.0.6 - Add async function support -- Add functions for set and remove for system config and file functions \ No newline at end of file +- Add functions for set and remove for system config and file functions +- Add TextFormatter for format the string with args \ No newline at end of file diff --git a/example/text_formatter_example.dart b/example/text_formatter_example.dart new file mode 100644 index 0000000..5181c7e --- /dev/null +++ b/example/text_formatter_example.dart @@ -0,0 +1,14 @@ +import 'package:configurable/text_formatter.dart'; + +void main(List args) { + var text1 = 'Hello, {0}, then do this it by {1}!'; + var text2 = 'Hello, {firstName}, then do this it by {lastName}!'; + var result1 = TextFormatter(text1).format(['Sambo', 'Chea']); + var result2 = TextFormatter(text2).decorate({ + 'firstName': 'Sambo', + 'lastName': 'Chea', + }); + + print('Result 1 => $result1'); + print('Result 2 => $result2'); +} diff --git a/lib/text_formatter.dart b/lib/text_formatter.dart new file mode 100644 index 0000000..08bccf3 --- /dev/null +++ b/lib/text_formatter.dart @@ -0,0 +1,33 @@ +class TextFormatter { + String? text; + + TextFormatter(String? text) { + this.text = text; + } + + String? format(List args) { + if (text == null) { + return null; + } + + var msg = text; + args.asMap().forEach((index, element) { + msg = msg?.replaceAll('{$index}', element); + }); + + return msg; + } + + String? decorate(Map args) { + if (text == null) { + return null; + } + + var msg = text; + args.forEach((index, element) { + msg = msg?.replaceAll('{$index}', element); + }); + + return msg; + } +} diff --git a/test/text_formatter_test.dart b/test/text_formatter_test.dart new file mode 100644 index 0000000..60c1e8b --- /dev/null +++ b/test/text_formatter_test.dart @@ -0,0 +1,15 @@ +import 'package:configurable/text_formatter.dart'; +import 'package:test/test.dart'; + +void main() { + test('text formatter function format', () { + var text1 = 'Hello, {0}!'; + var result1 = TextFormatter(text1).format(['Sambo']); + + var text2 = 'Hello, {name}!'; + var result2 = TextFormatter(text2).decorate({'name': 'Chea'}); + + expect('Hello, Sambo!', result1); + expect('Hello, Chea!', result2); + }); +}