hive_dev_tools 0.0.1 copy "hive_dev_tools: ^0.0.1" to clipboard
hive_dev_tools: ^0.0.1 copied to clipboard

Enhances the development workflow by offering real-time previews of hive storage.

example/lib/main.dart

import 'dart:convert';

import 'package:dartz/dartz.dart' hide State;
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';

import 'hive_service.dart';

void main() async {
  await Hive.initFlutter();
  await HiveService.getBoxData();

  await Hive.openBox(HiveBoxes.box1);
  await Hive.openBox(HiveBoxes.box2);

  runApp(ExampleApp());
}

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

  @override
  State<ExampleApp> createState() => _ExampleAppState();
}

class _ExampleAppState extends State<ExampleApp> {
  final box = Hive.box(HiveBoxes.box1);
  late final PlayerCacheDatasource datasource;
  Player? player;

  @override
  void initState() {
    super.initState();
    datasource = PlayerCacheDatasource(box: box);
    final result = datasource.get();
    result.fold((_) => player = null, (player) => this.player = player);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                player == null ? 'Player is null' : 'Player ${player!.name}',
              ),
              TextButton(
                onPressed: () {
                  final result = datasource.get();
                  result.fold(
                    (_) => player = null,
                    (player) => this.player = player,
                  );
                  setState(() {});
                },
                child: Text('get'),
              ),
              for (Player p in Player.values) ...[
                TextButton(
                  onPressed: () async {
                    await datasource.save(p);
                    final result = datasource.get();
                    result.fold(
                      (_) => player = null,
                      (player) => this.player = player,
                    );
                    setState(() {});
                  },
                  child: Text('set ${p.name}'),
                ),
              ],
              TextButton(
                onPressed: () {
                  datasource.box.clear();
                  player = null;
                  setState(() {});
                },
                child: Text('clear'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

enum Player {
  warrior,
  dragon,
  none;

  static Player fromJson(String json) {
    return Player.values.firstWhere(
      (player) => player.name == json,
      orElse: () => Player.none,
    );
  }

  String toJson() {
    return name;
  }
}

class PlayerCacheDatasource {
  const PlayerCacheDatasource({required this.box});

  final Box box;

  Either<Exception, Player> get() {
    try {
      final json = box.get(HiveKeys.player);
      if (json != null) {
        final player = Player.fromJson(jsonDecode(json));
        return Right(player);
      } else {
        return Left(Exception('No cache found'));
      }
    } catch (e) {
      return Left(Exception(e.toString()));
    }
  }

  Future<Either<Exception, void>> save(Player player) async {
    try {
      final json = jsonEncode(player.toJson());
      await box.put(HiveKeys.player, json);
      return const Right(null);
    } catch (e) {
      return Left(Exception(e.toString()));
    }
  }
}

class HiveBoxes {
  const HiveBoxes._();

  static const box1 = 'box1';
  static const box2 = 'box2';
}

class HiveKeys {
  const HiveKeys._();

  static const player = 'player';
}
0
likes
50
points
38
downloads

Publisher

unverified uploader

Weekly Downloads

Enhances the development workflow by offering real-time previews of hive storage.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

devtools_app_shared, devtools_extensions, flutter, flutter_localization, flutter_screenutil, get_it, intl, path_provider, vm_service, widgetbook, widgetbook_annotation

More

Packages that depend on hive_dev_tools