wacom_sigcaptx 0.0.5 copy "wacom_sigcaptx: ^0.0.5" to clipboard
wacom_sigcaptx: ^0.0.5 copied to clipboard

Platformweb

Wacom Web Components for Flutter

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:wacom_sigcaptx/wacom_sigcaptx.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const App());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter + Wacom POC',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const SamplePage(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Wacom Capture'),
      ),
      body: Container(
        padding: const EdgeInsets.all(20),
        alignment: Alignment.center,
        child: const WacomCapture(),
      ),
    );
  }
}

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

  @override
  State<WacomCapture> createState() => _WacomCaptureState();
}

class _WacomCaptureState extends State<WacomCapture> {
  bool _isLoading = false;
  String? _imageUrl;

  @override
  void initState() {
    super.initState();
  }

  Future<void> onTap() async {
    try {
      setState(() {
        _isLoading = true;
      });

      final url = await WacomSigcaptx.captureSignature(
        'captureId',
        'who',
        'why',
      );

      setState(() {
        _imageUrl = url;
      });
    } on Exception catch (e) {
      debugPrint('Error capturing signature: $e');
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: onTap,
      child: Container(
        decoration: BoxDecoration(
          color: Theme.of(context).colorScheme.primaryContainer,
          border: Border.all(
            color: Theme.of(context).textTheme.displayLarge?.color ??
                Theme.of(context).colorScheme.onSurface,
          ),
          borderRadius: BorderRadius.circular(8),
        ),
        padding: const EdgeInsets.all(20),
        alignment: Alignment.center,
        child: _isLoading
            ? const CircularProgressIndicator()
            : DisplayCapturedSignature(imageUrl: _imageUrl),
      ),
    );
  }
}

class DisplayCapturedSignature extends StatelessWidget {
  const DisplayCapturedSignature({
    required this.imageUrl,
    super.key,
  });

  final String? imageUrl;

  @override
  Widget build(BuildContext context) {
    final imageUrl = this.imageUrl;

    if (imageUrl != null) {
      return Image.network(imageUrl);
    }

    return Text(
      'Wacom Capture',
      style: Theme.of(context).textTheme.displayLarge,
    );
  }
}