createPage method

void createPage(
  1. String pageName,
  2. String path,
  3. String routesPath,
  4. List arguments,
)

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"!');
}