我在Flutter中实现了检查用户权限的方法,但是出现了“MissingPluginException”错误消息?

16

尽管我收到错误消息 Unhandled Exception: MissingPluginException(No implementation found for method checkPermissionStatus on channel flutter.baseflow.com/permissions/methods),但我还是实现了 checkPermissionStatus 方法。

  import 'dart:async';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:sampletestingpro/Pages/Firstpage.dart';
import 'package:custom_switch/custom_switch.dart';


class Clockinout extends StatefulWidget {
  @override
  _ClockinoutState createState() => _ClockinoutState();
}

class _ClockinoutState extends State<Clockinout> {
  bool location= false;

  GoogleMapController _controller;
  Position position;
  Widget _child;

  Future<void> getPermission() async{
    PermissionStatus permission=await PermissionHandler()
        .checkPermissionStatus(PermissionGroup.location);

    if(permission==PermissionStatus.denied)
      {
        await PermissionHandler()
            .requestPermissions([PermissionGroup.locationAlways]);
      }

    var geolocator=Geolocator();

    GeolocationStatus geolocationStatus=await geolocator.checkGeolocationPermissionStatus();

    switch(geolocationStatus)
    {
      case GeolocationStatus.disabled:
        showToast('Disabled');
        break;
      case GeolocationStatus.restricted:
        showToast('Restricted');
        break;
      case GeolocationStatus.denied:
        showToast('Denid');
        break;
      case GeolocationStatus.unknown:
        showToast('Unknown');
        break;
      case GeolocationStatus.granted:
        showToast('Granded');
        _getCurrentLocation();
        break;
    }



  }

  void showToast(message)
  {
    Fluttertoast.showToast(
      msg: message,
      toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.BOTTOM,
      timeInSecForIos: 1,
      backgroundColor:  Colors.red,
      textColor: Colors.white,
      fontSize: 16.0,

    );
  }

  void _getCurrentLocation() async
  {
    Position res=await Geolocator().getCurrentPosition();
    setState(() {
      position=res;
      _child=_mapWidget();
    });
  }

  @override
  void initState() {
    getPermission();
    super.initState();

  }

  Widget _mapWidget()
  {
    return GoogleMap(
      mapType: MapType.normal,
      initialCameraPosition: CameraPosition(target: LatLng(position.latitude,position.longitude),zoom:20.0),
      onMapCreated:(GoogleMapController controller)
      {
        _controller=controller;
      },
    );
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Center(
          child: Text(
            '',
            style: TextStyle(color: Colors.black),
          ),
        ),
        backgroundColor: Colors.white,
        elevation: 0.0,
        leading: Padding(
          padding: const EdgeInsets.all(8.0),
          child: IconButton(
            icon: Icon(
              Icons.chevron_left,
              color: Colors.black,
            ),
            onPressed: () {
              print('back');
              Navigator.of(context).push(
                  new MaterialPageRoute(builder: (context) => Firstpage()));
            },
          ),
        ),
      ),
      body: SingleChildScrollView(
        child:Container(
         child: Padding(
           padding: const EdgeInsets.all(8.0),
           child: Column(
             children: <Widget>[
               Row(
                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
                 children: <Widget>[
                   Text('Hentry Nixon',style: TextStyle(fontSize: 25,fontWeight: FontWeight.bold,),),
                   CustomSwitch(
                     activeColor: location == false ? Colors.red : Colors.green,
                     value: location,
                     onChanged: (value) {
                       print("VALUE : $value");
                       setState(() {
                         location = value;
                       });
                     },
                   ),
                 ],
               ),
               Row(
                 children: <Widget>[
                   Text('2020.02.14',style: TextStyle(color: Colors.black45,),),
                   Text(''),
                 ],
               ),
               SizedBox(height: 50.0,),
               Row(
                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
                 children: <Widget>[
                   Text('Current Project/Task',style: TextStyle(color: Colors.black,fontWeight: FontWeight.bold,fontSize: 20.0),),
                   Text('Harmony',style: TextStyle(color: Colors.black,fontSize: 20.0),),
                 ],
               ),
               Divider(
                 thickness: 2,
               ),
               Row(
                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
                 children: <Widget>[
                   Text('Current Activity',style: TextStyle(color: Colors.black,fontWeight: FontWeight.bold,fontSize: 20.0),),
                   Text('Testing',style: TextStyle(color: Colors.black,fontSize: 20.0),),
                 ],
               ),
               Divider(
                 thickness: 2,
               ),
              Container(
                height: 350.0,
                color: Colors.yellow,
                child: _child,
              ),
             ],
           ),
         ),
        ),
      ),
    );
  }
}

有没有办法实现检查权限并获取当前位置


2
你是在尝试通过 hot reloadhot restart 运行应用程序吗?如果是这样,请停止执行,运行 flutter clean 然后再运行 flutter run。希望能解决你的问题。 - Darshan
1
我尝试了热重启但没有起作用,在您的指导下,我尝试了flutter run,它运行得很好,非常感谢。这是我的问题的答案。 - Prasath
3个回答

25

这对我起作用

flutter run
或者
flutter clean

2
“热重载”是一个单独的命令,还是类似于“Flutter 热重载”这样的东西? - tim
实际上我的意思是,从IDE进行热重载,没有叫做hot reload的命令。感谢您的问题,抱歉我回复晚了。 - Prasath

4

有时这是由于AndroidManifest.xml中的错误meta-data或activity等实现而引起的...

当我强制更新所有插件时,我遇到了那种MissingPluginException错误。因为我在AndroidManifest.xml中使用了旧版本的Facebook登录meta-data和activity。修复后一切正常。


4
我已经完全停止运行了,退出/关闭应用程序并重新启动,然后尝试运行。
点击停止按钮,请参考下面的链接:enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接