banuba_sdk 1.9.8 copy "banuba_sdk: ^1.9.8" to clipboard
banuba_sdk: ^1.9.8 copied to clipboard

Banuba SDK for Flutter - full-scale augmented reality SDK | Flutter face filters | Virtual try-on | Background replacement | Face tracking

example/lib/main.dart

import 'dart:async';
import 'dart:io';

import 'package:banuba_sdk_example/page_camera.dart';
import 'package:banuba_sdk_example/page_image.dart';
import 'package:banuba_sdk_example/page_touchup.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:fluttertoast/fluttertoast.dart';

const banubaToken = '6kzOjw9/0rwj++hCoUEryTRKfEC8pkAjGbiOTzWJzkaZsmDK+Vc8ciaCArKSGeZysOANaATaeZ0ARCv5QgO+FfIirL2XX6rUAd0pb52GjzwekfE1OmayjDjfxkON3+/3VBazdMod9Icc2WHOXWZIDA7gikwHT/5DvMn0ysSOsUgmNS05UXnoABrJKAaFRONxXfkudqRggICCL8nj1mbBMVYzFhimRKjgRkLK02qMukj+Cr9jzp3vPo4Q4NISoGqqlno/v/QTw7GdmNZ17N/jr/o+tlQFg1N+8PPxtMZ8hAMeNia39bV/e7IVvHGox61pBwDfQr/g/zASxqrJI36QKfdI0ZCUiVdWcXlbnGKuhSpscF5DjjD73FxP2/xiV0EkWZcZrlb23jSnqI3FJlVBcuoiv/3wCMCiABxthahWYNk0j1pHh16o4f2TeUxhB8iZdx3OtYMNNt/gN5A2hEJqg7H8t0lt7ciF8VBENfNOoxr+o1xhQ2nQXCQkjZJyp00GNztIHpJs4UOzBIrt5n3EJtXFbw52diAzZtBEHDS0SRu8LMXDrzvjpDnA41f2+U1JE4R2onG52kmbOvbnKSN50G5KKMd6cdipcS99eIxgxfnARXhglbV8Se5S4TaiNkYRJXmPvJAGS0yHhu89zHs4273w2t9Y3Gt2faUYj+4Yq9M2ME0FYlsxUg1DSUTOaiqUdv7MKa237fVPHbwZMuFwH7B3OouZXJ9ilBZxUfl3O04359rqW97RSjJejX9W5QYoEtNBRrkRrkXcUGTTkNuYezASu5EM8B2arqP2VfYxz6Zd4oeGjCCZiMyYHCeYj4ReY+2BCoFLc468BjidCbQKnCOm3xNnyzAVVCI7IpBronxudT87SKNStR+O9p1js1l3AkbeNB1d5K4GGK7HqSR6X0ll7Jhn5Am5PAzmEy1LzxBQbNsqE6JhQmVHgOPtb2m/kEZIrdW477Q+qdHhmwkmSiIGyE9FX4Wo4eeI21U7rMB00OrQxbpXQ0XynfqCnv1KfhQtGgePdxIDZyPmOKctYLUE8NsOzocluhAGpIZzls8TyIqHkQ4yWt9IUWgFCuL1E6xEzM7gq1i5g9udY1t7J7sZ8y4IqyiDwB1QYVptzr1YZEDu9jlnvTgE5hRmNgOUFsxMWSQZEoOd58itkkChU1NyTe/ihhtgnSbqiqsO2gFGpRVh/HFE9ruSvj4JfPuD+dTlS/ZVjB8qk5a3neXF844PU96W8WOIxsevYrA2tvOzBnMSejF3YFVDRMitiS8UOrBvorsvyYZiBZk6VhPiLdxEmf/SOL7rChUTU/zaE1RS8awOEaaipXvzWT/FiT6D63fXI8KxrKuRZ6p/13PuXf5MGugFTbq8f67oNZ+MaFLn0QzgHqbYZ6zadp3/rZMcodluwic13IL9vEf8w88wfN5jU+K2beosQ0EtJzHQStzl2gPYiJOXZYtSGM+QlQo2NohaK8TwNa6pGSH9vbTqK6XAcRi1/Ei/muJRfzBFjMT6DQ4zxDbfDHv17phsn31zFcCpZ6yVxvGnOs0UmMiX4QFR0bzB6cotmsDhY2TdilpTxwIRzFCy4Fc1RY+BXpat9a4c/chIwScJIlIcLDKLsDpxn8ok45URDVm6seFfPf9JvavAwqOzjdEq0PG1whD7k+KWiyQZRAdy3YEZWo5Z6xCBUGjUKlP00gPcui6oyABql5E8No1oTPplCVbCk+wyPdvJAY+CiVpsY7nKbO8fq7/U9kp1ZXOHh/fvy1/EO0gj9zv55wSqbk5MveW4xfDEmOjtjbJHfaIyDIUnwYAVaT4ioU74B4qbDzBRUgOtPrO6OCRTREWBdj+uBe9oxeItWiAfJeWNccpjl2OYovZ0xgY2dfhGhc6qRFs51JUD+vcshAb0uo16LUEwmormHV2qzz0V+DHL2xtbPoNPF+CqbF9MuYzcQUTs5+UPm9asnEtHCGBkeh7iBnxbeEkm6NOBcz9SWCvMKsuXpnbK7EraySGHYdhn1xfbDWtfkYFJ1d9nu8BrnM/X1tUvZgDzdXnUyKtxgEXCHJGbfyxm3Gwj27nkGf0RI5S+RBw4cI/d2He2nL6xY/QXXCXa6nGTDS5zSKKIVkwZZlkrHkO+0TdrcvDUYdIFH2QLhygkfgcOzyP/lEsN2Gpl6ZYLVrqQCCFWtt/20nZVDAGMorBlOuoQFXSUEWfKsf8nt69nicMmT6qJO8djUUKUmC1FDfY7cMJB1dk=';

enum EntryPage { camera, image, touchUp }

void main() {
  runApp(const MaterialApp(home: MyApp()));
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  @override
  Widget build(BuildContext context) {
    final buttonStyle = ElevatedButton.styleFrom(
      shape: const StadiumBorder(),
      fixedSize: Size(MediaQuery.of(context).size.width / 2.0, 50),
    );
    Text textWidget(String text) {
      return Text(
        text.toUpperCase(),
        style: const TextStyle(fontSize: 13.0),
      );
    }

    return Scaffold(
      appBar: AppBar(
        title: const Text('Face AR Flutter Sample'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          ElevatedButton(
            style: buttonStyle,
            onPressed: () => _navigateToPage(EntryPage.camera),
            child: textWidget('Open Camera'),
          ),
          SizedBox.fromSize(size: const Size.fromHeight(20.0)),
          ElevatedButton(
            style: buttonStyle,
            onPressed: () => _navigateToPage(EntryPage.image),
            child: textWidget('Image processing'),
          ),
          SizedBox.fromSize(size: const Size.fromHeight(20.0)),
          ElevatedButton(
            style: buttonStyle,
            onPressed: () => _navigateToPage(EntryPage.touchUp),
            child: textWidget('Touch Up features'),
          ),
        ],
      ),
    );
  }

  void _navigateToPage(EntryPage entryPage) {
    switch (entryPage) {
      case EntryPage.camera:
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const CameraPage()),
        );
        return;

      case EntryPage.image:
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const ImagePage()),
        );
        return;

      case EntryPage.touchUp:
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const TouchUpPage()),
        );
        return;
    }
  }
}

Future<String> generateFilePath(String prefix, String fileExt) async {
  final directory = await getTemporaryDirectory();
  final filename = '$prefix${DateTime.now().millisecondsSinceEpoch}$fileExt';
  return '${directory.path}${Platform.pathSeparator}$filename';
}

// This is a sample implementation of requesting permissions.
// It is expected that the user grants all permissions. This solution does not handle the case
// when the user denies access or navigating the user to Settings for granting access.
// Please implement better permissions handling in your project.
Future<bool> requestPermissions() async {
  final requiredPermissions = _getPlatformPermissions();
  for (var permission in requiredPermissions) {
    var ps = await permission.status;
    if (!ps.isGranted) {
      ps = await permission.request();
      if (!ps.isGranted) {
        return false;
      }
    }
  }
  return true;
}

List<Permission> _getPlatformPermissions() {
  if (Platform.isAndroid) {
    // Implement check version flow on your side
    final versionHigher11 = true;
    if (versionHigher11) {
      return [Permission.camera, Permission.microphone, Permission.manageExternalStorage];
    } else {
      return [Permission.camera, Permission.microphone, Permission.storage];
    }
  } else if (Platform.isIOS) {
    return [Permission.camera, Permission.microphone];
  } else {
    throw Exception('Platform is not supported!');
  }
}

void showToastMessage(String message) {
  Fluttertoast.showToast(
      msg: message,
      toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.CENTER,
      timeInSecForIosWeb: 1,
      textColor: Colors.white,
      fontSize: 14.0
  );
}
14
likes
0
pub points
77%
popularity

Publisher

unverified uploader

Banuba SDK for Flutter - full-scale augmented reality SDK | Flutter face filters | Virtual try-on | Background replacement | Face tracking

Homepage

License

unknown (license)

Dependencies

flutter, pigeon, plugin_platform_interface

More

Packages that depend on banuba_sdk