cdx_components 0.8.0-alpha.2
cdx_components: ^0.8.0-alpha.2 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')
],),
)
],
);
}
}