velix 0.17.0 copy "velix: ^0.17.0" to clipboard
velix: ^0.17.0 copied to clipboard

flutter foundation library including validation, a reflection based mapper and automatic two-way form binding .

example/lib/main.dart

import 'package:flutter/cupertino.dart';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:velix/velix.dart';

import 'package:provider/provider.dart';
import 'main.type_registry.g.dart';
import 'providers/todo_provider.dart';
import 'screens/main_screen.dart';

class EasyLocalizationTranslator extends Translator {
  // constructor

  EasyLocalizationTranslator() {
    Translator.instance = this;
  }

  // implement

  @override
  String translate(String key, {Map<String, dynamic>  args = const {}}) {
    return I18N.instance.translate(key, args: args);
  }
}


class MultiAssetLoader extends AssetLoader {
  // instance data

  final List<String> paths;

  // constructor

  MultiAssetLoader({required this.paths});

  // override

  @override
  Future<Map<String, dynamic>> load(String path, Locale locale) async {
    Map<String, dynamic> translations = {};

    for (final basePath in paths) {
      try {
        // Determine the full path based on locale folder + filename
        late String file;

        // Split the last segment of basePath as filename

        final segments = basePath.split('/');
        final fileName = segments.last; // e.g. 'example.json' or 'velix.json'
        final dirPath = segments.sublist(0, segments.length - 1).join('/');

        file = '$dirPath/${locale.languageCode}/$fileName.json';


        final jsonStr = await rootBundle.loadString(file);
        final Map<String, dynamic> jsonMap = json.decode(jsonStr);

        translations.addAll(jsonMap); // Merge
      }
      catch (e) {
        // Ignore missing files
        print(e);
      }
    }

    return translations;
  }
}


void main() async {
  // configure json stuff

  JSON(
      validate: false,
      converters: [Convert<DateTime,String>((value) => value.toIso8601String(), convertTarget: (str) => DateTime.parse(str))],
      factories: [Enum2StringFactory()]);

  TypeViolationTranslationProvider();

  registerAllDescriptors();
  registerWidgets(TargetPlatform.iOS);

  WidgetsFlutterBinding.ensureInitialized();

  //await EasyLocalization.ensureInitialized();

  Tracer.enabled = true;
  Tracer(
      trace: ConsoleTrace("%d [%l] %p: %m [%f]"), // d(ate), l(evel), p(ath), m(message)
      paths: {
        "i18n": TraceLevel.full
      });

  var localeManager = LocaleManager(Locale('en', "EN"), supportedLocales: [Locale('en', "EN"), Locale('de', "DE")]);
  var i18n = I18N(
      fallbackLocale: Locale("en", "EN"),
      localeManager: localeManager,
      loader: AssetTranslationLoader(
        namespacePackageMap: {
          "velix": "velix"
        }
      ),
      missingKeyHandler: (key) => '##$key##',
      preloadNamespaces: ["velix", "example"]
  );

  // load namespaces

  runApp(
    /*EasyLocalization(
      supportedLocales: const [Locale('en'), Locale('de')],
      path: '.', // folder path!
      assetLoader: MultiAssetLoader(paths: [
        "assets/locales/example",
        "packages/velix/assets/locales/velix",
      ]),
      fallbackLocale: const Locale('en'),*/
    ChangeNotifierProvider.value(
      value: localeManager,
      child: TODOApp(i18n: i18n),
    ),
  );
}

class TODOApp extends StatelessWidget {
  // instance data

  final I18N i18n;
  
  // constructor
  
  const TODOApp({super.key, required this.i18n});
  
  // override

  @override
  Widget build(BuildContext context) {
    final localeManager = context.watch<LocaleManager>();

    return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => TodoProvider()),
        Provider<CommandManager>(create: (_) => CommandManager(
          interceptors: [
            LockCommandInterceptor(),
            TracingCommandInterceptor()
          ],
          translator: EasyLocalizationTranslator()
        )),
      ],
      child: Consumer<LocaleManager>(
        builder: (BuildContext context, LocaleManager value, Widget? child) {
          return CupertinoApp(
            title: 'TODO',

            theme: const CupertinoThemeData(
              brightness: Brightness.light,
              primaryColor: CupertinoColors.activeBlue,
            ),

            // localization

            localizationsDelegates: [I18nDelegate(i18n: i18n), GlobalCupertinoLocalizations.delegate,],//...context.localizationDelegates,
            supportedLocales: localeManager.supportedLocales,
            locale: localeManager.locale,

            home: const MainScreen(),
          );
        }
        )
    );
  }
}
4
likes
0
points
8
downloads

Publisher

unverified uploader

Weekly Downloads

flutter foundation library including validation, a reflection based mapper and automatic two-way form binding .

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

analyzer, build, flutter, glob, intl, path, path_provider, provider, source_gen, stack_trace

More

Packages that depend on velix