vibration_composition 0.0.2 copy "vibration_composition: ^0.0.2" to clipboard
vibration_composition: ^0.0.2 copied to clipboard

A Plugin Forwarding (and Emulating) the Composition Haptics Api for Rich Vibrattions.

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:vibration_composition/vibration_composition.dart' as vib;

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 2,
        child: Scaffold(
          appBar: AppBar(
            title: const Text('new Vibration api support'),
            bottom: const TabBar(
              tabs: [
                Tab(text: 'Primitives'),
                Tab(text: 'Envelope'),
              ],
            ),
          ),
          body: const TabBarView(children: [_PrimitivesTab(), _EnvelopeTab()]),
        ),
      ),
    );
  }
}

class _PrimitivesTab extends StatefulWidget {
  const _PrimitivesTab();

  @override
  State<_PrimitivesTab> createState() => _PrimitivesTabState();
}

class _PrimitivesTabState extends State<_PrimitivesTab> {
  Map<vib.Primitive, int> primitives = {};

  @override
  void initState() {
    super.initState();
    vib.primitiveDurations().then((primitives) {
      if (!mounted) return;
      setState(() {
        final sorted = primitives.entries.toList()
          ..sort((a, b) => a.value.compareTo(b.value));
        this.primitives = Map.fromEntries(sorted);
      });
    });
    vib.prepareVibrator();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: primitives
            .map(
              (p, ms) => MapEntry(
                p,
                TextButton(
                  onPressed: () async {
                    vib.composeAndPlay([
                      vib.CompositionParams(primitive: p, delayMs: 200),
                    ]);
                  },
                  child: Text('${p.name} (${ms}ms)'),
                ),
              ),
            )
            .values
            .toList(),
      ),
    );
  }
}

class _EnvelopeTab extends StatefulWidget {
  const _EnvelopeTab();

  @override
  State<_EnvelopeTab> createState() => _EnvelopeTabState();
}

class _EnvelopeTabState extends State<_EnvelopeTab> {
  vib.EnvelopeCapabilityData? capability;

  @override
  void initState() {
    super.initState();
    vib.envelopeCapability().then((capability) {
      if (!mounted) return;
      setState(() {
        this.capability = capability;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    final cap = capability;
    if (cap == null) {
      return const Center(child: Text('Envelope not supported'));
    }
    final rows = <(String, String)>[
      ('maxControlPtDuration', '${cap.maxControlPtDuration}'),
      ('minControlPtDuration', '${cap.minControlPtDuration}'),
      ('maxControlPtCount', '${cap.maxControlPtCount}'),
      ('maxSumDuration', '${cap.maxSumDuration}'),
      ('maxGs', '${cap.maxGs}'),
      ('minFreq', '${cap.minFreq}'),
      ('maxFreq', '${cap.maxFreq}'),
    ];
    return ListView(
      children: [
        for (final (label, value) in rows)
          ListTile(title: Text(label), trailing: Text(value)),
      ],
    );
  }
}
0
likes
140
points
210
downloads

Documentation

API reference

Publisher

verified publisherh-h.win

Weekly Downloads

A Plugin Forwarding (and Emulating) the Composition Haptics Api for Rich Vibrattions.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, meta, plugin_platform_interface

More

Packages that depend on vibration_composition

Packages that implement vibration_composition