generateLanguageSelector static method

String generateLanguageSelector(
  1. String projectName
)

Implementation

static String generateLanguageSelector(String projectName) {
  return '''
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:$projectName/core/providers/locale_provider.dart';

class LanguageSelector extends StatelessWidget {
const LanguageSelector({Key? key}) : super(key: key);

static const Map<String, String> languages = {
  'en': '🇬🇧 English',
  'es': '🇪🇸 Español',
  'fr': '🇫🇷 Français',
  'de': '🇩🇪 Deutsch',
  'it': '🇮🇹 Italiano',
  'pt': '🇵🇹 Português',
  'ru': '🇷🇺 Русский',
  'zh': '🇨🇳 中文',
  'ja': '🇯🇵 日本語',
  'ar': '🇸🇦 العربية',
  'hi': '🇮🇳 हिन्दी',
  'bn': '🇮🇳 বাংলা',
  'te': '🇮🇳 తెలుగు',
  'mr': '🇮🇳 मराठी',
  'ta': '🇮🇳 தமிழ்',
  'gu': '🇮🇳 ગુજરાતી',
  'kn': '🇮🇳 ಕನ್ನಡ',
  'ml': '🇮🇳 മലയാളം',
  'pa': '🇮🇳 ਪੰਜਾਬੀ',
  'or': '🇮🇳 ଓଡ଼ିଆ',
};

@override
Widget build(BuildContext context) {
  final localeProvider = Provider.of<LocaleProvider>(context);
  final currentLocale = localeProvider.locale.languageCode;

  return AlertDialog(
    title: const Text('Select Language'),
    content: SizedBox(
      width: double.maxFinite,
      child: ListView.builder(
        shrinkWrap: true,
        itemCount: languages.length,
        itemBuilder: (context, index) {
          final entry = languages.entries.elementAt(index);
          final isSelected = currentLocale == entry.key;

          return ListTile(
            leading: Text(
              entry.value.split(' ').first,
              style: const TextStyle(fontSize: 24),
            ),
            title: Text(entry.value.split(' ').skip(1).join(' ')),
            trailing: isSelected
                ? Icon(Icons.check, color: Theme.of(context).primaryColor)
                : null,
            selected: isSelected,
            onTap: () {
              localeProvider.setLocale(Locale(entry.key));
              Navigator.pop(context);
            },
          );
        },
      ),
    ),
    actions: [
      TextButton(
        onPressed: () => Navigator.pop(context),
        child: const Text('Cancel'),
      ),
    ],
  );
}

static void show(BuildContext context) {
  showDialog(
    context: context,
    builder: (context) => const LanguageSelector(),
  );
}
}
''';
}