我試圖在他/她登錄后在另一個頁面上顯示用戶的名稱。我在另一個頁面上顯示代碼或訊息沒有問題。但是當我嘗試顯示姓名或電子郵件時,我得到了一個空值。這是 的回應,print(data['name']); -> I/flutter ( 4896): null這是 的回應print(data['code']); -> I/flutter ( 4896): 0。我嘗試?? ''像這樣添加它pageRoute(data['name'] ?? '');以避免以下錯誤:
E/flutter ( 4896): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: type 'Null' is not a subtype of type 'String'
E/flutter ( 4896): #0 _MyHomePageState.login (package:login/main.dart:99:23)
E/flutter ( 4896): <asynchronous suspension>
用戶登錄時我仍然得到一個空值。如果用戶輸入正確的電子郵件和密碼,這是 URL 的回應。
I/flutter ( 4896): 200
I/flutter ( 4896): {"code":0,"message":"success","data":{"Id":121106,"Name":"John",
"Email":"[email protected]","Token":"4ca34eb1-0416-43f9-8d3e-19ed51d64288"}}
這是我下面的代碼:
Future<void> login() async {
if(emailController.text.isNotEmpty && passController.text.isNotEmpty) {
var headers = {"Content-type": "application/json"};
var myBody = {
'email' : emailController.text,
'password' : passController.text,
};
var response = await http.post(Uri.parse("url"),
headers: headers,
body: jsonEncode( myBody ));
final data = jsonDecode(response.body);
if(response.statusCode == 200 && data['code'] == 0) {
pageRoute(data['name'] ?? '');
} else {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Invalid Credentials.")));
}
} else {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Blank Field Not Allowed")));
}
}
void pageRoute(String name) async {
//here we store value inside shared preferences
SharedPreferences pref = await SharedPreferences.getInstance();
await pref.setString("login", name);
Navigator.push(context, MaterialPageRoute(builder: (context) => const Home()));
}
}
主頁.dart
String name= "";
@override
void initState() {
// TODO: implement initState
super.initState();
getName();
}
Future<void> getName() async {
//here we fetch our credentials from shared pref
SharedPreferences pref = await SharedPreferences.getInstance();
setState(() {
name = pref.getString("login")!;
});
}
//
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: SafeArea(
child: Center(
child: Column(
children: [
Image.asset(
'profile_image.jpg', height: 150, width: 150,),
const SizedBox(height: 15,),
Text("Welcome: $name"), //still null
const SizedBox(height: 15,),
const Text('Logout'),
],
)
)
),
),
)
);
uj5u.com熱心網友回復:
更改data['name']為data['data']['Name']
uj5u.com熱心網友回復:
是的,將 data['name'] 更改為 data['data']['Name'] 肯定會解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/479409.html
上一篇:我不知道為什么這個應用程式關閉(因為資料系結,setOnClickListener)
下一篇:未解決的包“顫動”
