cdx_components 0.7.20 copy "cdx_components: ^0.7.20" to clipboard
cdx_components: ^0.7.20 copied to clipboard

A set of components, utils and extensions helpful to solve many problems.

example/lib/main.dart

import 'package:cdx_components/injector.dart';
import 'package:cdx_components/core/models/dropdown_item.dart';
import 'package:cdx_components/core/models/form_item.dart';
import 'package:cdx_components/core/services/app/iapp_service.dart';
import 'package:cdx_components/core/services/app/ievent_service.dart';
import 'package:cdx_components/core/services/app/itheme_service.dart';
import 'package:cdx_components/core/services/app/imedia_service.dart';
import 'package:cdx_components/widgets/custom_button.dart';
import 'package:cdx_components/widgets/form_builder.dart';
import 'package:example/services/app_theme_service.dart';
import 'package:example/services/app_service.dart';
import 'package:example/services/event_service.dart';
import 'package:example/services/media_service.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:rxdart/rxdart.dart';

void main() {
  GetIt.I.registerSingleton<IEventService>(EventService());
  GetIt.I.registerSingleton<IMediaService>(MediaService());
  GetIt.I.registerSingleton<IThemeService>(AppThemeService());
  GetIt.I.registerSingleton<IAppService>(AppService());

  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    //DI.app().setLocalization(AppLocalizations.of(context)!);
    return MaterialApp(
      title: 'Namer App',
      theme: ThemeData(
        useMaterial3: true,
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),
      ),
      home: const MainPage(),
    );
  }
}

class MainPage extends StatelessWidget {
  const MainPage({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Namer App',
        theme: DI.theme().themeData,
        home: const Scaffold(body: SafeArea(child: MyHomePage())));
  }
}

class Obj {
  final String? title;
  final String? description;
  final String? author;
  final String? status;

  Obj({
    this.title,
    this.description,
    this.author,
    this.status,
  });
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  FormBuilder? formBuilder;
  final BehaviorSubject<Map<String, FormItem>> clearSubject = BehaviorSubject.seeded({});
  final BehaviorSubject<Obj> subject = BehaviorSubject();
  final BehaviorSubject<bool> showErrorSubject = BehaviorSubject();

  @override
  void initState() {
    super.initState();
    _buildForm();
  }

  void _buildForm() {
    subject.add(Obj());

    List<DropdownItem> nationOpts = [
      DropdownItem(title: 'Italia', value: 'IT'),
      DropdownItem(title: 'Messico', value: 'MX'),
      DropdownItem(title: 'Corea', value: 'KO'),
    ];

    formBuilder = FormBuilder(
        subject: BehaviorSubject(),
        formMap: clearSubject,
        hintStyle: const TextStyle(
            color: Colors.grey, fontWeight: FontWeight.w500, fontSize: 12
        ),
        showErrorsStream: showErrorSubject,
        errorMessage: 'Riempi il campo',
    );

    subject.stream.listen((value) {
      clearSubject.add({
        'title': FormItem(
            hint: 'loc.title',
            type: FormType.text,
            validation: (value) => value?.toString().isNotEmpty == true,
            value: value.title ?? '',
            inRow: true
        ),
        'description': FormItem(
          hint: 'loc.description',
          type: FormType.multiline,
          validation: (value) => value?.toString().isNotEmpty == true,
          value: value.description ?? '',
        ),
        'author': FormItem(
            hint: 'loc.author',
            type: FormType.text,
            validation: (value) => true,
            value: value.author ?? '',
            breakCol: true
        ),
        'status': FormItem(
          hint: 'loc.status',
          type: FormType.dropdown,
          validation: (value) => value != null,
          value: value.status?.isNotEmpty == true ? nationOpts.cast<DropdownItem?>().firstWhere((element) => element?.value == value.status, orElse: () => null) : null,
          options: nationOpts,
        ),
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        formBuilder ?? Container(),
        Padding(
          padding: const EdgeInsets.all(16.0),
          child: Row(children: [
            PrimaryButton(onPressed: () {
              showErrorSubject.add(true);
              //subject.add(Obj());
            }, text: 'Salva')
          ],),
        )
      ],
    );
  }
}
2
likes
0
points
441
downloads

Publisher

unverified uploader

Weekly Downloads

A set of components, utils and extensions helpful to solve many problems.

Homepage

License

unknown (license)

Dependencies

auto_route, file_picker, flutter, flutter_colorpicker, flutter_svg, fluttertoast, get_it, http, image_picker, intl, json_annotation, keyboard_actions, lottie, nanoid, rxdart

More

Packages that depend on cdx_components