Allow a single trailing underscore in lowerCamelCase (#2707)

diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 1fe2834..aa95658 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -7,7 +7,7 @@
 final _identifier = RegExp(r'^([(_|$)a-zA-Z]+([_a-zA-Z0-9])*)$');
 
 final _lowerCamelCase = RegExp(
-    r'^(_)*[?$a-z][a-z0-9?$]*(([A-Z][a-z0-9?$]*)|([_][0-9][a-z0-9?$]*))*$');
+    r'^(_)*[?$a-z][a-z0-9?$]*(([A-Z][a-z0-9?$]*)|([_][0-9][a-z0-9?$]*))*_?$');
 
 final _lowerCaseUnderScore = RegExp(r'^([a-z]+([_]?[a-z0-9]+)*)+$');
 
diff --git a/test/utils_test.dart b/test/utils_test.dart
index f578ca9..8861880 100644
--- a/test/utils_test.dart
+++ b/test/utils_test.dart
@@ -189,11 +189,12 @@
       '\$foo',
       'bar\$',
       'foo\$Generated',
-      'foo\$Generated\$Bar'
+      'foo\$Generated\$Bar',
+      'foo_',
     ];
     testEach(good, isLowerCamelCase, isTrue);
 
-    var bad = ['Foo', 'foo_', 'foo_bar', '_X'];
+    var bad = ['Foo', 'foo_bar', '_X'];
     testEach(bad, isLowerCamelCase, isFalse);
   });