Database Setup & Custom Adapters
hive_ce on pub.dev↗ dependencies: hive_ce: latest hive_ce_flutter: latest Basic basic hive import 'package:flutter/material.dart'; import 'package:hive_ce_flutter/hive_flutter.dart'; void main() async { await Hive.initFlutter(); await Hive.openBox("fruits"); runApp( MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold(body: const MyApp()), darkTheme: ThemeData.dark(), themeMode: .dark, ), ); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { final box = Hive.box("fruits"); @override Widget build(BuildContext context) { return Column( spacing: 24, crossAxisAlignment: .stretch, mainAxisAlignment: .center, children: [ Text( box.get("isDarkMode", defaultValue: false).toString(), textAlign: .center, ), TextButton( onPressed: () { box.put("isDarkMode", null); setState(() {}); }, child: Text("save"), ), TextButton( onPressed: () { box.delete("isDarkMode"); setState(() {}); }, child: Text("delete"), ), ], ); } } Box<T> type specific counter import 'package:flutter/material.dart'; import 'package:hive_ce/hive.dart'; import 'package:hive_ce_flutter/hive_ce_flutter.dart'; void main() async { await Hive.initFlutter(); await Hive.openBox<int>('counter'); runApp( MaterialApp( home: const MyApp(), darkTheme: ThemeData.dark(), themeMode: .dark, ), ); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { final counter = Hive.box<int>('counter'); @override Widget build(BuildContext context) { return Scaffold( body: Padding( padding: .all(8.0), child: ElevatedButton( onPressed: () { counter.put("v1", counter.get("v1", defaultValue: 0)! + 1); setState(() {}); // to refresh the ui }, child: Text("counter ${counter.get("v1").toString()}"), ), ), ); } } Custom adapter import 'package:flutter/material.dart'; import 'package:hive_ce/hive.dart'; import 'package:hive_ce_flutter/hive_ce_flutter.dart'; class User { new({required this.name, required this.dob}); final String name; final DateTime dob; @override String toString() { return "User(name: $name, dob: $dob)"; } } class UserAdapter extends TypeAdapter<User> { @override final int typeId = 0; @override User read(BinaryReader reader) { return User(name: reader.read(), dob: reader.read()); } @override void write(BinaryWriter writer, User obj) { writer.write(obj.name); writer.write(obj.dob); } } void main() async { await Hive.initFlutter(); Hive.registerAdapter(UserAdapter()); await Hive.openBox<User>('users'); runApp( MaterialApp( home: const MyApp(), darkTheme: ThemeData.dark(), themeMode: .dark, ), ); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { final controller = TextEditingController(); final userBox = Hive.box<User>("users"); void add() async { await userBox.put(0, User(name: controller.text, dob: DateTime.now())); setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Padding( padding: .all(8.0), child: Column( spacing: 24, crossAxisAlignment: .stretch, mainAxisSize: .min, children: [ Text(userBox.get(0).toString()), TextFormField( controller: controller, decoration: InputDecoration(border: OutlineInputBorder()), ), ElevatedButton(onPressed: add, child: Text("add user")), ], ), ), ), ); } } Generate adapter To generate adapters, use hive_ce_generator and build_runner.
...