Flutter在按下按钮或发生事件时授予相机和麦克风权限

问题描述

我需要在单击按钮时授予“摄像头和麦克风”权限。我希望我的权限一个一个地出现,但是在这种情况下,仅显示麦克风权限。要授予“相机”权限,我必须再次按下按钮。

我该如何实现?

            import 'package:Flutter/material.dart';
            import 'package:Flutter_inappwebview/Flutter_inappwebview.dart';
            import 'package:permission_handler/permission_handler.dart';

            class IframeScreen extends StatefulWidget {
            @override
           _IframeScreenState createState() => _IframeScreenState();
             }

             class _IframeScreenState extends State<IframeScreen> {
              InAppWebViewController _webViewController;

              Future webViewMethod() async {
              print('In Microphone permission method');
              WidgetsFlutterBinding.ensureInitialized();
            
              Permission.microphone.request();
              WebViewMethodForCamera();

             }
              Future WebViewMethodForCamera() async{
               print('In Camera permission method');
               WidgetsFlutterBinding.ensureInitialized();
               Permission.camera.request();
              }



            @override
            Widget build(BuildContext context) {
            return Scaffold(
            appBar: AppBar(
            title: Text('Check this frame'),),body: Column(
      children: <Widget>[
        RaisedButton(
          onpressed: webViewMethod,child: Text('Join'),textColor: Colors.black,Expanded(
          child: Container(
            child: InAppWebView(
                initialUrl: "https://appr.tc/r/158489234",initialOptions: InAppWebViewGroupOptions(
                  crossplatform: InAppWebViewOptions(
                    mediaplaybackRequiresUserGesture: false,debuggingEnabled: true,onWebViewCreated: (InAppWebViewController controller) {
                  _webViewController = controller;
                },androidOnPermissionRequest: (
                    InAppWebViewController controller,String origin,List<String> resources) async {
                  return PermissionRequestResponse(resources: resources,action: PermissionRequestResponseAction.GRANT);
                }
            ),)

      ],)
);

} }

解决方法

您可以在下面复制粘贴运行完整代码
您可以等待Permission.microphone.request();await Permission.camera.request();
代码段

Future webViewMethod() async {
    print('In Microphone permission method');
    //WidgetsFlutterBinding.ensureInitialized();

    await Permission.microphone.request();
    WebViewMethodForCamera();

  }
  
Future WebViewMethodForCamera() async{
    print('In Camera permission method');
    //WidgetsFlutterBinding.ensureInitialized();
    await Permission.camera.request();
}

工作演示

enter image description here

完整代码

import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:permission_handler/permission_handler.dart';

class IframeScreen extends StatefulWidget {
  @override
  _IframeScreenState createState() => _IframeScreenState();
}

class _IframeScreenState extends State<IframeScreen> {
  InAppWebViewController _webViewController;

  Future webViewMethod() async {
    print('In Microphone permission method');
    //WidgetsFlutterBinding.ensureInitialized();

    await Permission.microphone.request();
    WebViewMethodForCamera();

  }
  Future WebViewMethodForCamera() async{
    print('In Camera permission method');
    //WidgetsFlutterBinding.ensureInitialized();
    await Permission.camera.request();
  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Check this frame'),),body: Column(
          children: <Widget>[
            RaisedButton(
              onPressed: webViewMethod,child: Text('Join'),textColor: Colors.black,Expanded(
              child: Container(
                child: InAppWebView(
                    initialUrl: "https://appr.tc/r/158489234",initialOptions: InAppWebViewGroupOptions(
                      crossPlatform: InAppWebViewOptions(
                        mediaPlaybackRequiresUserGesture: false,debuggingEnabled: true,onWebViewCreated: (InAppWebViewController controller) {
                      _webViewController = controller;
                    },androidOnPermissionRequest: (
                        InAppWebViewController controller,String origin,List<String> resources) async {
                      return PermissionRequestResponse(resources: resources,action: PermissionRequestResponseAction.GRANT);
                    }
                ),)

          ],)
    );
  } }

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

class MyApp extends StatelessWidget {  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',theme: ThemeData(       
        primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,home: IframeScreen(),);
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key,this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {     
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {    
    return Scaffold(
      appBar: AppBar(       
        title: Text(widget.title),body: Center(        
        child: Column(          
          mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
            Text(
              'You have pushed the button this many times:',Text(
              '$_counter',style: Theme.of(context).textTheme.headline4,],floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,tooltip: 'Increment',child: Icon(Icons.add),);
  }
}
,

尝试

await WebViewMethodForCamera();