0

I can’t run the project through flutter! It doesn’t take the location on Android, and the video/camera doesn’t display on iPhone! Help with this, other sites with camera and location support are all working

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart';
import 'package:geolocator/geolocator.dart';

class FaceIDPage extends StatefulWidget {
const FaceIDPage({Key? key}) : super(key: key);

@override
_FaceIDPageState createState() => _FaceIDPageState();
}

class _FaceIDPageState extends State<FaceIDPage> {
late final WebViewController _controller;

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

Future<void> _requestPermissions() async {
if (Platform.isIOS) {
  await [
    Permission.camera,
    Permission.microphone,
    Permission.location,
  ].request();
} else if (Platform.isAndroid) {
  await [
    Permission.camera,
    Permission.location,
    Permission.microphone,
  ].request();
}
}

Future<Position> _getCurrentPosition() async {
bool serviceEnabled;
LocationPermission permission;

serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
  return Future.error('Location services are disabled.');
}

permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
  permission = await Geolocator.requestPermission();
  if (permission == LocationPermission.denied) {
    return Future.error('Location permissions are denied');
  }
}

if (permission == LocationPermission.deniedForever) {
  return Future.error('Location permissions are permanently denied.');
}

return await Geolocator.getCurrentPosition();
}

void _setGeolocationInWebView(WebViewController controller) async {
try {
  Position position = await _getCurrentPosition();

  await controller.runJavaScript('''
    navigator.geolocation.getCurrentPosition = function(success, error) {
      success({coords: {latitude: ${position.latitude}, longitude: ${position.longitude}}});
    };
  ''');
} catch (e) {
  debugPrint('Ошибка при получении координат: $e');
}
}

void _initializeWebView() {
final PlatformWebViewControllerCreationParams params = PlatformWebViewControllerCreationParams();
_controller = WebViewController.fromPlatformCreationParams(
  params,
  onPermissionRequest: (resources) async {
    return resources.grant(); 
  },
)
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..setBackgroundColor(Colors.transparent)
  ..setNavigationDelegate(
    NavigationDelegate(
      onPageFinished: (String url) {
        _setGeolocationInWebView(_controller); 
      },
    ),
  )
  ..loadRequest(Uri.parse('https://pyth.***'));

if (Platform.isAndroid) {
  final AndroidWebViewController androidController = _controller.platform as AndroidWebViewController;
  AndroidWebViewController.enableDebugging(true);
  androidController.setMediaPlaybackRequiresUserGesture(false);
  //androidController.setGeolocationEnabled(true); 
} else if (Platform.isIOS) {
  _controller.runJavaScript('''
    navigator.mediaDevices.getUserMedia({ video: true, audio: true })
    .then(stream => {
      const video = document.createElement('video');
      video.srcObject = stream;
      video.setAttribute('playsinline', true);
      video.play();
      document.body.appendChild(video);
    })
    .catch(error => {
      console.error('Ошибка при доступе к камере: ', error);
    });
  ''');
}
}

 @override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: const Text('FaceID Верификация'),
  ),
  body: WebViewWidget(controller: _controller),
);
 }
}

The server part runs on python, flask server, app.py includes index.html and then js css, etc.

2

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.