enum_flag 3.0.0 copy "enum_flag: ^3.0.0" to clipboard
enum_flag: ^3.0.0 copied to clipboard

Portable enum bit flags for Dart with typed FlagSet values, stable bit positions, and int extensions.

example/example.dart

// This executable demonstrates the package by printing each result.
// ignore_for_file: avoid_print

import 'package:enum_flag/enum_flag.dart';

// Explicit positions are recommended for persisted or external masks.
enum Permission with EnumFlag {
  read(0),
  write(1),
  execute(2),
  delete(3);

  const Permission(this.bitIndex);

  @override
  final int bitIndex;
}

// Index-based flags are convenient for values that are never persisted.
enum LocalFeature with EnumFlag {
  compactMode,
  diagnostics,
}

void main() {
  print('=== Stable bit values ===');
  print('read.value: ${Permission.read.value}'); // 1
  print('write.value: ${Permission.write.value}'); // 2
  print('execute.binary: ${Permission.execute.binary}'); // 00000100
  print('delete.label: ${Permission.delete.label}'); // delete

  print('\n=== int API ===');
  final readWrite = [Permission.read, Permission.write].flag;
  print('read | write: $readWrite'); // 3
  print('has read: ${readWrite.hasFlag(Permission.read)}'); // true
  print('has execute: ${readWrite.hasFlag(Permission.execute)}'); // false
  print(
    'active: ${readWrite.describeFlags(Permission.values)}',
  ); // read | write

  print('\n=== Typed FlagSet API ===');
  final permissions = [Permission.read, Permission.execute].flagSet;
  final updated = permissions
      .add(Permission.write)
      .remove(Permission.execute)
      .toggle(Permission.delete);
  print('bits: ${updated.bits}'); // 11
  print('contains write: ${updated.contains(Permission.write)}'); // true
  print('active: ${updated.activeFlags(Permission.values)}');

  print('\n=== Unknown and signed bits ===');
  final withUnknown = FlagSet<Permission>.fromBits(0x13);
  print(withUnknown.describe(Permission.values));
  // read | write | unknown(0x00000010)

  final signed = FlagSet<Permission>.fromSigned32(-1);
  print('unsigned: ${signed.bits}'); // 4294967295
  print('signed: ${signed.signedBits}'); // -1

  print('\n=== Index-based local flags ===');
  print(LocalFeature.values.all); // 3
}
10
likes
160
points
1.54k
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Portable enum bit flags for Dart with typed FlagSet values, stable bit positions, and int extensions.

Repository (GitHub)
View/report issues

Topics

#enum #bitmask #flags

License

MIT (license)

Dependencies

meta

More

Packages that depend on enum_flag