Example of Flutter app integration with Clan Meeting

Clan Meeting – Flutter Integration

Please make sure that the permissions required for mobile apps are added to your app. We use Flutter InAppWebView for this integration.

Flutter Specific Permissions

Add the following to your AndroidManifest.xml file.

<!-- Webview -->
<provider
    android:name="com.pichillilorenzo.flutter_inappwebview.InAppWebViewFileProvider"
    android:authorities="${applicationId}.flutter_inappwebview.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />
</provider>

Add the permissions required by the below packages

Flutter Downloader related code is optional and only needed if you want the the shared files to be downloaded within the app. If you do not include Flutter Downloader, then the files will be downloaded using the default mobile browser. Required permissions listed on the package page are needed for downloading shared files within your app.

https://pub.dev/packages/flutter_downloader

URL Launcher is used for opening URLs pasted in chat.

https://pub.dev/packages/url_launcher

Include packages

Add the following to your pubspec.yaml file.

flutter_inappwebview: ^5.3.2
permission_handler: ^8.3.0
url_launcher: ^6.0.13
wakelock: ^0.5.6
path_provider: ^2.0.7
flutter_downloader: ^1.7.1

Create / Join Meeting

Edit the following in main.dart. There is no difference between creating and joining a meeting. A meeting gets created as soon as the first participant joins and is destroyed when the last participant leaves.

void _joinMeeting() async {
  const String domain = 'try.clanmeeting.com';
  const String consumerId = 'colacoca';
  String roomName = Utility.randomString(10);
  const String displayName = 'John Doe';

Remember to request for camera and microphone permissions

Already included in example main.dart

// Request for camera and microphone permissions
await Permission.camera.request();
await Permission.microphone.request();

WebView options

Already included in example clanmeeting.dart

InAppWebViewGroupOptions(
  crossPlatform: InAppWebViewOptions(
    clearCache: true,
    javaScriptCanOpenWindowsAutomatically: true,
    mediaPlaybackRequiresUserGesture: false, // important
  ),
  android: AndroidInAppWebViewOptions(
    supportMultipleWindows: true,
    useHybridComposition: true, // important
  ),
  ios: IOSInAppWebViewOptions(
    allowsInlineMediaPlayback: true, // important
  )
);

GitHub

View Github