velix_editor 0.1.1 copy "velix_editor: ^0.1.1" to clipboard
velix_editor: ^0.1.1 copied to clipboard

Velix Wysiwyg UI editor and runtime engine.

example/lib/main.dart

import 'package:flutter/cupertino.dart' hide MetaData;
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:velix/velix.dart' hide Property;
import 'package:velix_di/velix_di.dart';
import 'package:velix_editor/editor/editor.dart';
import 'package:velix_editor/editor_module.dart';

import 'package:velix_editor/metadata/widget_data.dart';
import 'package:velix_editor/metadata/widgets/button.dart';
import 'package:velix_editor/metadata/widgets/container.dart';
import 'package:velix_editor/metadata/widgets/text.dart';
import 'package:velix_i18n/velix_i18n.dart';
import 'package:velix_mapper/mapper/json.dart';
import 'package:velix_mapper/mapper/mapper.dart';
import 'package:velix_ui/velix_ui.dart';

import 'package:provider/provider.dart';


class VelixTranslator extends Translator {
  // constructor

  VelixTranslator() {
    Translator.instance = this;
  }

  // implement

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

@Module(imports: [EditorModule])
class ApplicationModule {
  // lifecycle

  @OnInit()
  void onInit() {
    print("ApplicationModule.onInit()");
  }

  @OnDestroy()
  void onDestroy() {
    print("ApplicationModule.onDestroy()");
  }
}

void main() async {
  // flutter

  registerWidgets(TargetPlatform.iOS);

  WidgetsFlutterBinding.ensureInitialized();

  // tracer

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

  // bootstrap types

  Velix.bootstrap;
  EditorModule.boot; // this sucks

  // configure json stuff

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

  // translation

  TypeViolationTranslationProvider();

  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: {
          "validation": "velix"
        }
      ),
      missingKeyHandler: (key) => '##$key##',
      preloadNamespaces: ["validation", "example"]
  );

  /*var json = {
    "type": "container",
    "children": [
      {
        "type": "text",
        "label": "Hello World"
      },
      {
        "type": "button",
        "number": 1,
        "isCool": true
      },
      {
        "type": "text",
        "label": "Second Text"
      }
    ]
  };

  var widget = JSON.deserialize<WidgetData>(json); // TEST TODO */

  var widgets = ContainerWidgetData(children: [
    TextWidgetData(label: "eins"),
    ButtonWidgetData(label: "zwei", number: 2, isCool: true),
    TextWidgetData(label: "zwei"),
    ContainerWidgetData(children: [
      TextWidgetData(label: "drei"),
      TextWidgetData(label: "vier"),
    ])
  ]);


  // boot environment

  var environment = Environment(forModule: ApplicationModule);

  // load namespaces

  runApp(EditorApp(environment: environment, i18n: i18n, widgets: [widgets]));
}

class EditorApp extends StatelessWidget {
  // instance data

  final I18N i18n;
  final Environment environment;
  final List<WidgetData> widgets;
  
  // constructor

  const EditorApp({super.key, required this.i18n, required this.environment, required this.widgets});
  
  // override

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

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

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

                  // localization

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

                  // main screen

                  home: EditorScreen(models: widgets),
                );
              }
          )
      )
    );
  }
}