Flutter 在按下按钮或 onpressed 事件后授予摄像头和麦克风权限

Flutter give camera and microphone permissions after pressing button or on onpressed event

我需要通过单击按钮授予摄像头和麦克风权限。我希望我的权限一个接一个地出现,但在这种情况下,只出现麦克风权限。要授予相机权限,我必须再次按下按钮。

我怎样才能做到这一点?

            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);
                }
            ),
          ),
        )

      ],
    )
);

} }

正在尝试

await WebViewMethodForCamera();

您可以复制粘贴 运行 下面的完整代码
您可以等待 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();
}

工作演示

完整代码

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),
      ),
    );
  }
}