idht 0.1.0
idht: ^0.1.0 copied to clipboard
A Flutter library that accelerates app development with ready-to-use utilities like localization, dependency injection, events, and in-memory database.
Event Example #
import 'package:flutter/material.dart';
import 'package:idht/idht.dart';
void setup(){
Event<int>.register(value: 0, key: "counter");
}
void main(){
setup();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
final counterEvent = Event.get("counter");
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Event")),
body: Align(
child: EventBuilder(
events: [counterEvent],
builder: (context) => Text("You have pushed the button this many times: ${counterEvent.value}")
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => counterEvent.send(counterEvent.value + 1),
child: Icon(Icons.add),
),
),
);
}
}
Localization Example #
import 'package:flutter/material.dart';
import 'package:idht/idht.dart';
enum AppLanguage {en, es}
void setup(){
Localization(langs: AppLanguage.values)
.byLanguage({
AppLanguage.en: {
"change_language": "Change Language",
"counter": "You have pushed the button this many times: {count}",
"language": "English"
},
AppLanguage.es: {
"change_language": "cambiar idioma",
"counter": "Has pulsado el botón muchas veces: {count}",
"language": "Español"
},
});
}
void main(){
setup();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int counter = 0;
@override
Widget build(BuildContext context) {
final localization = di.get<Localization>();
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Localization (${'language'.tr})")),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text("counter".trWith(values: {"count": counter})),
TextButton(
onPressed: () => setState((){
localization.changeLanguage(
localization.currentLanguage==AppLanguage.en
? AppLanguage.es
: AppLanguage.en
);
}),
child: Text("change_language".tr)
)
],
)
),
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() {
counter++;
}),
child: Icon(Icons.add),
),
),
);
}
}
Store Example #
import 'package:flutter/material.dart';
import 'package:idht/idht.dart';
class Todo {
final String title;
bool isDone;
Todo(this.title, this.isDone);
}
void main(){
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
final todos = store.getAll<Todo>();
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Store")),
body: Center(
child: ListView.builder(
itemCount: todos.length,
itemBuilder: (context, index) => buildTodo(todos[index]),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() {
final todo = Todo("new Todo", false);
store.put<Todo>(todo);
}),
child: Icon(Icons.add),
),
),
);
}
Widget buildTodo(Todo todo) {
return ListTile(
title: Text(todo.title),
leading: Checkbox(
value: todo.isDone,
onChanged: (value) => setState(() {
todo.isDone = value!;
}),
),
trailing: IconButton(
onPressed: () => setState(() {
store.remove<Todo>(todo);
}),
icon: Icon(Icons.delete),
),
);
}
}
Dependency Injection (DI) Example #
import 'package:flutter/material.dart';
import 'package:idht/idht.dart';
class Settings {
ThemeMode theme = ThemeMode.light;
}
class Logger {
final int id;
Logger(this.id);
}
void setup(){
di.registerSingleton<Settings>(Settings());
int loggerId = 0;
di.registerFactory(() => Logger(loggerId++));
}
void main(){
setup();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
final settings = di.get<Settings>();
return MaterialApp(
theme: ThemeData(),
darkTheme: ThemeData.dark(),
themeMode: settings.theme,
home: Scaffold(
appBar: AppBar(title: Text("Dependency Injection (DI)")),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextButton(
onPressed: () => setState(() {
settings.theme = settings.theme == ThemeMode.light
? ThemeMode.dark
: ThemeMode.light;
}),
child: Text("Toggle Theme (Singleton)")
),
Text("Logger ID: ${di.get<Logger>().id} (Factory)")
],
)
),
),
);
}
}