Flutter 2.12+版本SDK调用signIn登录无响应如何解决?
解决方案
1. 依赖版本适配
新建Flutter项目默认Dart SDK版本为>=2.12.0 <3.0.0,该版本区间不兼容shared_preferences: ^2.0.6,你需要修改pubspec.yaml文件中的依赖声明,将shared_preferences版本调整为^2.0.7,之后执行flutter pub get更新依赖即可解决版本兼容问题。
2. 安卓打包权限配置
模拟器运行属于debug调试模式,Flutter默认给debug包授予了网络权限,而release正式包默认没有网络权限,这就是你打包成APK后点击登录无响应的核心原因。
你需要在安卓项目的AndroidManifest.xml文件中添加网络权限声明,权限代码如下:
<uses-permission android:name="android.permission.INTERNET" />
注意:权限声明需要放在
manifest根节点下,不要写在application节点内部。
3. 可选代码优化(推荐)
你当前的登录方法没有做异常捕获,当出现网络超时、域名解析失败、请求地址错误等异常时,方法会直接中断运行,也会出现点击无反应的情况。你可以给代码加上异常捕获逻辑,同时可以添加用户提示提升体验:
signIn(String email, String password, BuildContext context) async { try { SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); var jsonResponse = null; var response = await http.get(Uri.https('myrl', 'login' + '$email/$password')); if (response.statusCode == 200) { jsonResponse = json.decode(response.body); if (jsonResponse != null) { sharedPreferences.setString("email_token", email); Navigator.of(context).pushReplacement(MaterialPageRoute( builder: (context) => MyApp() )); } } else { txtPassword.clear(); } } catch (err) { // 此处可添加Toast等提示告知用户网络请求失败 txtPassword.clear(); } }
内容的提问来源于stack exchange,提问作者babayaro
相关产品推荐
相关产品推荐

