簡體   English   中英

插入新值后 POST 請求正文未更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM