newPage method
void
newPage()
Implementation
void newPage() {
final pathSeparator = Platform.pathSeparator;
Directory dir = Directory(['lib', 'app', 'screens'].join(pathSeparator));
String pageName = '';
if (args.length >= 2 && args[1] != '') {
pageName = args[1];
final regex = RegExp(r'[!@#$%^&*(),.?":{}|<>]');
if (regex.hasMatch(pageName)) {
throw Exception(
'$pageName name is invalid\nFile name must not contain special characters',
);
}
} else {
throw Exception('page name must be provided');
}
if (args.length >= 3 && args[2] != '') {
dir = Directory(
args[2].replaceAll('/', pathSeparator).replaceAll('\\', pathSeparator),
);
}
String viewName = '${pageName.toLowerCase()}_page';
String controllerName = '${pageName.toLowerCase()}_controller';
File viewFile = File(
[dir.path, 'views', 'pages', '$viewName.dart'].join(pathSeparator),
);
File controllerFile = File(
[dir.path, 'controllers', '$controllerName.dart'].join(pathSeparator),
);
if (!viewFile.existsSync()) {
viewFile.createSync(recursive: true);
}
if (!controllerFile.existsSync()) {
controllerFile.createSync(recursive: true);
}
const green = '\x1B[32m';
const reset = '\x1B[0m';
List<String> result = [];
final viewClassName = _snakeToPascal(viewName);
final controllerClassName = _snakeToPascal(controllerName);
//
//
//
//
//
// Generate view file
result.add("import 'package:flutter/material.dart';");
result.add("import 'package:uloc/uloc.dart';");
result.add('');
result.add("import '../../controllers/$controllerName.dart';");
result.add('');
result.add('class $viewClassName extends StatefulWidget {');
result.add(' const $viewClassName({super.key});');
result.add('');
result.add(' @override');
result.add(
' State<$viewClassName> createState() => _${viewClassName}State();',
);
result.add('}');
result.add('');
result.add('class _${viewClassName}State extends State<$viewClassName> {');
result.add(
' $controllerClassName get watch => context.watch<$controllerClassName>();',
);
result.add(
' $controllerClassName get controller => context.read<$controllerClassName>();',
);
result.add('');
result.add(' @override');
result.add(' Widget build(BuildContext context) {');
result.add(' return Scaffold(');
result.add(' appBar: AppBar(title: Text(watch.name)),');
result.add(' body: Center(child: Text(watch.content)),');
result.add(' );');
result.add(' }');
result.add('}');
result.add('');
viewFile.writeAsStringSync(result.join('\n'));
print('$green File generated: ${viewFile.absolute.path} $reset');
//
//
//
//
//
//
//
//
//
//
//
//
//
// Generate controller file
result.clear();
result.add("import 'package:uloc/uloc.dart';");
result.add('');
result.add('class $controllerClassName extends ULoCProvider {');
result.add(' $controllerClassName(super.context);');
result.add(' String name = "Home";');
result.add(' String content = "Home has not yet implemented";');
result.add('');
result.add(' @override');
result.add(' void onInit() {');
result.add(' super.onInit();');
result.add(' }');
result.add('');
result.add(' @override');
result.add(' void onReady() {');
result.add(' super.onReady();');
result.add(' }');
result.add('');
result.add(' @override');
result.add(' void onDispose() {');
result.add(' super.onDispose();');
result.add(' }');
result.add('');
result.add('}');
result.add('');
controllerFile.writeAsStringSync(result.join('\n'));
print('$green File generated: ${controllerFile.absolute.path} $reset');
exit(0);
}