如何处理“与设备的连接丢失”。错误

时间:2021-07-16 05:37:25

标签: flutter authentication

我创建了一个应用程序,其中包含登录和仪表板屏幕,我还使用了 Nodejs 后端和 mongodb。我尝试在用户登录并关闭应用程序而不注销时添加功能,然后当用户进入应用程序时,它应该显示上次离开的位置。所以我使用了共享偏好。我现在正在测试它,当我使用最右边的按钮(显示所有当前正在运行的应用程序)登录并关闭应用程序时,它会向我发送这个 “与设备的连接丢失。 “

登录代码:

bool newuser;
  String type ;
  SharedPreferences myPrefs;

void initState() {
    
    checkIfLoggedinalready();
    
  }

Future login() async {
    try {
      Dio dio = new Dio();
      var data = {
        'username':"Munib khatri",
        'password': "Munib123",
        'date': "5/5/2021"
      };
      await dio
          .post(localhostUrlLogin, data: json.encode(data))
          .then((onResponse) async {
         type = onResponse.data['User']['Type'];
        

        if (type == 'Employee') {
          Navigator.push(
              context, new MaterialPageRoute(builder: (context) => Employee()));
        } else if (type == 'Manager') {
          Navigator.push(
              context, new MaterialPageRoute(builder: (context) => Manager()));
        }
        myPrefs.setBool('login', false);
      });
    } catch (e) {
     
      
    }
  }


  void checkIfLoggedinalready() async{
   myPrefs = await SharedPreferences.getInstance();
    newuser = (myPrefs.getBool('login') ?? true);
    print(newuser);
    if (newuser == false && type == 'Employee') {
      Navigator.pushReplacement(
          context, new MaterialPageRoute(builder: (context) => Employee()));
    }

  }

仪表板代码:

我在使用注销的抽屉代码上执行此操作

 new ListTile(
              title: new Text('Log out'),
              leading: Icon(Icons.logout,color:Colors.grey),
              onTap: (){
                myPrefs.setBool('login', true); //here i set it to true, if user is new
                Navigator.pop(context);
                  Navigator.push(context, new MaterialPageRoute(
                    builder: (context)=>
                    
                    Login()
                    )
                  );
              },
            ),

请帮忙,不胜感激。

2 个答案:

答案 0 :(得分:0)

 var response =
    await http.post(Uri.parse(parseUse), body: json.encode(data), headers: {   "Content-Type": "application/json; charset=UTF-8", }).timeout(Duration(minutes: 2));

更新答案:

   try{
    
   Dio dio = new Dio();
      var data = {
        'username':"Munib khatri",
        'password': "Munib123",
        'date': "5/5/2021"
      };
      await dio
          .post(localhostUrlLogin, data: json.encode(data))
          .then((onResponse) async {
         type = onResponse.data['User']['Type'];
        

        if (type == 'Employee') {
          Navigator.push(
              context, new MaterialPageRoute(builder: (context) => Employee()));
        } else if (type == 'Manager') {
          Navigator.push(
              context, new MaterialPageRoute(builder: (context) => Manager()));
        }
        myPrefs.setBool('login', false);
      });
    
    }on DioError catch (e){
    
    if(e.type == DioErrorType.connectTimeout){
    "You can put a alert dialog or something you prefer".
    }

    }

或者你也可以使用 base Option,因为你使用的是 DIO

var dio = Dio(); // with default Options

// Set default configs
dio.options.baseUrl = 'https://www.xx.com/api';
dio.options.connectTimeout = 5000; //5s
dio.options.receiveTimeout = 3000;

// or new Dio with a BaseOptions instance.
var options = BaseOptions(
  baseUrl: 'https://www.xx.com/api',
  connectTimeout: 5000,
  receiveTimeout: 3000,
);
Dio dio = Dio(options);

response = await dio.request(
  '/test',
  data: {'id':12,'name':'xx'},
  options: Options(method:'GET'),
);

答案 1 :(得分:0)

与设备的连接丢失 不是编码问题,由于数据线,您的链接设备当时断开连接,如果您在模拟器上进行测试,则不会出现此问题。 如果您在共享首选项中保存用户数据,请在保存之前对您的敏感数据进行编码。