[英]POST request body is not updating after inserting new value
我有一個登錄字段,在執行發布請求時它返回 http 代碼。 如果我輸入一個有效的電話號碼,它會返回 200。這里一切正常。 但是當我嘗試重現一條錯誤消息時,它會永遠存儲以前的電話號碼,我找不到像一開始那樣重置該字段的方法。 這與緩存有關嗎? 還是關於變量 state?
我的帖子正文存儲在global_variables.dart
中:
final Map<String, dynamic> loginBody = {
"type": "device",
"app_id": '1',
"email": "example@example.pt",
"country_id": '1',
"phone_number": phone.text, --> I want to reset the value here
"password": "secret"
};
login.dart
@override
void initState() {
super.initState();
success = false;
focusNode.addListener(() {
if (!focusNode.hasFocus) {
log(phone.text);
}
});
refreshValues();
}
@override
void dispose() {
focusNode.dispose();
phone.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return !success
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
maxLength: 9,
controller: phone,
focusNode: focusNode,
),
),
ElevatedButton(
onPressed: () async {
await login();
if (success) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: Colors.green,
content: Text(
loginSuccessful.toString(),
),
),
);
// ignore: use_build_context_synchronously
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const BreakdownScreen(),
),
);
refreshValues();
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: Colors.red,
content: Text(
loginUnsuccessful.toString(),
),
),
);
refreshValues();
}
},
child: const Text('Login'),
)
],
)
: Container();
}
void refreshValues() {
setState(
() {
loginSuccessful = "";
loginUnsuccessful = "";
phone.text = "";
},
);
}
Future<void> login() async {
try {
if (phone.text.length == 9) {
var response = await http.post(
Uri.parse("http://LOCAL_API/api/login"),
body: loginBody,
);
if (response.statusCode == 200) {
Map<String, dynamic> loginSuccess = json.decode(response.body);
Map<String, dynamic> loginTokenOnSuccess = json.decode(response.body);
loginToken = loginTokenOnSuccess['data'];
setState(
() {
loginSuccessful = loginSuccess['message'];
success = true;
// phone.text = "";
},
);
} else {
Map<String, dynamic> loginNoSuccess = json.decode(response.body);
setState(() {
success = false;
loginUnsuccessful = loginNoSuccess['message'];
});
}
}
} on Exception catch (e) {
log('ERRO ----- ${e.toString()},');
log(
json.encode(loginBody),
);
}
}
Output 與無效電話 333333333:
{(...)"phone_number":"333333333"}
Output 與有效電話 22222222(例如):它僅在插入第一個值后不會更新,並且在我熱重新加載應用程序之前保持不變。
{(...)"phone_number":"333333333"}
tl;博士:我的 phone_number 字段在第二次嘗試后沒有改變
解決了!
我必須直接在 POST function 上構建主體,並將其從global_variables.dart
文件中刪除。
Future login() async {
try {
setState(() {});
if (phone.text.length == 9) {
var response = await http.post(
Uri.parse("http://LOCAL_API/api/login"),
body: {
"type": "device",
"app_id": '1',
"email": "example@mexample.com",
"country_id": '1',
"phone_number": phone.text,
"password": "secret"
},
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.