createPage method
Implementation
void createPage(String pageName, String path, String routesPath,
List<dynamic> arguments) {
final className = _capitalize(_toCamelCase(pageName));
final basePath = '$path/$pageName';
print('Creating page: $pageName at path: $basePath');
// Define folder structure
final folders = [
basePath,
'$basePath/controllers',
'$basePath/views',
'$basePath/bindings',
];
// Define initial files to generate
final files = {
'$basePath/controllers/${pageName}_controller.dart': '''
import 'package:flutter_riverpod/flutter_riverpod.dart';
class ${className}Controller extends StateNotifier<int> {
${className}Controller() : super(0){
onInit();
}
void onInit() {
// Perform initialization logic here
print('Controller initialized');
}
// Increment the counter
void increment() => state++;
// Decrement the counter
void decrement() {
if (state > 0) state--;
}
}
''',
'$basePath/views/${pageName}_view.dart': '''
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../bindings/${pageName}_binding.dart';
class ${className}View extends StatelessWidget {
const ${className}View({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('$className View')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Counter display
Consumer(
builder: (context, ref, _) {
final counter = ref.watch(${pageName}ControllerProvider);
return Text(
'Counter: \$counter',
style: Theme.of(context).textTheme.headline4,
);
},
),
const SizedBox(height: 16),
// Buttons to update the counter
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Consumer(
builder: (context, ref, _) {
final controller = ref.read(${pageName}ControllerProvider.notifier);
return ElevatedButton(
onPressed: controller.decrement,
child: const Text('-'),
);
},
),
const SizedBox(width: 16),
Consumer(
builder: (context, ref, _) {
final controller = ref.read(${pageName}ControllerProvider.notifier);
return ElevatedButton(
onPressed: controller.increment,
child: const Text('+'),
);
},
),
],
),
],
),
),
);
}
}
''',
'$basePath/bindings/${pageName}_binding.dart': '''
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../controllers/${pageName}_controller.dart';
/// StateNotifierProvider for $className
final ${pageName}ControllerProvider =
StateNotifierProvider<${className}Controller, int>((ref) {
return ${className}Controller();
});
''',
};
// Ensure folders are created
for (var folder in folders) {
final dir = Directory(folder);
if (!dir.existsSync()) {
dir.createSync(recursive: true);
print('Created folder: $folder');
}
}
// Create or overwrite files
files.forEach((path, content) {
final file = File(path);
file.writeAsStringSync(content); // Overwrite with new content
print('Created or updated file: $path');
});
if (arguments[1].toString().startsWith('page:')) {
// Update routing files
_updateRoutingFiles(pageName, routesPath, arguments);
}
print('Page "$pageName" created successfully at "$basePath"!');
}