You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用HTTP POST请求不生效,代码无报错该如何解决?

Flutter POST请求无响应问题修复方案

核心问题梳理

  • 接口请求参数硬编码,未绑定输入框用户输入内容
  • 异步请求未做等待处理,响应结果仅打印在控制台,未同步到页面展示
  • 原生端未配置网络权限,导致请求被系统拦截
  • 部分场景缺少必要的请求头配置

分步修复方案

1. 配置网络权限

  • Android端:在android/app/src/main/AndroidManifest.xml的manifest标签下添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  • iOS端:在ios/Runner/Info.plist的dict标签下添加网络访问配置:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

2. 确认http依赖已添加

在pubspec.yaml中引入http库:

dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0

3. 修改请求方法,绑定输入参数

调整postData方法,支持接收用户输入的内容,增加状态码判断:

import 'dart:convert';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

Future<Map?> postData(String description) async {
  try {
    var response = await http.post(
        Uri.parse("https://zen-api-1010.azure-api.net/notes/v1/create"),
        headers: {
          "Ocp-Apim-Subscription-Key": "008c47b597e54aedadbd5e4d270b35ed",
          "Ocp-Apim-Trace": "true",
          "Content-Type": "application/x-www-form-urlencoded",
        },
        body: {
          "noteType": 0.toString(),
          "description": description,
          "authorReaction": 0.toString(),
          "privacy": 0.toString(),
        });
    print("响应状态码:${response.statusCode}");
    print("响应内容:${response.body}");
    if(response.statusCode == 200) {
      return jsonDecode(response.body);
    }
    return null;
  } catch (e) {
    print("请求报错:$e");
    return null;
  }
}

4. 调整提交按钮逻辑,同步结果到页面

在_NavPrivatePageState类中新增变量存储接口返回结果,修改按钮点击逻辑:

class _NavPrivatePageState extends State<NavPrivatePage> {
  TextEditingController descriptionController = TextEditingController();
  Map? apiResult; // 存储接口返回结果
  bool inVisible = true;
  bool isNotVisible = false;

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: const Text(
            'Private Note Auto Expand',
            style: TextStyle(fontSize: 14),
          ),
          centerTitle: true,
          backgroundColor: const Color.fromRGBO(255, 191, 0, 1),
        ),
        body: SingleChildScrollView(
          child: Center(
            child: Padding(
              padding: const EdgeInsets.all(10.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  Visibility(
                    visible: inVisible,
                    child: TextButton(
                      onPressed: () {
                        setState(() {
                          isNotVisible = !isNotVisible;
                        });
                      },
                      child: const Text(
                        'Create Private Note',
                        style: TextStyle(color: Colors.white),
                      ),
                      style: TextButton.styleFrom(backgroundColor: Colors.grey[900]),
                    ),
                  ),
                  Visibility(
                    visible: isNotVisible,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: TextFormField(
                        controller: descriptionController,
                        autofocus: false,
                        minLines: 2,
                        maxLines: 20,
                        keyboardType: TextInputType.multiline,
                        decoration: InputDecoration(
                          hintText: 'Enter your message here',
                          hintStyle: TextStyle(color: Colors.grey[600], fontSize: 12),
                          border: const OutlineInputBorder(
                            borderRadius: BorderRadius.all(Radius.circular(5)),
                          ),
                        ),
                      ),
                    ),
                  ),
                  Visibility(
                    visible: isNotVisible,
                    child: TextButton(
                      onPressed: () async {
                        String inputContent = descriptionController.text.trim();
                        if(inputContent.isEmpty) {
                          ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("请输入笔记内容")));
                          return;
                        }
                        var result = await postData(inputContent);
                        setState(() {
                          apiResult = result;
                        });
                      },
                      child: const Text(
                        'Submit',
                        style: TextStyle(color: Colors.white),
                      ),
                      style: TextButton.styleFrom(backgroundColor: Colors.grey[600]),
                    ),
                  ),
                  // 新增响应结果展示区域
                  if(apiResult != null)
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Text(
                        "创建成功,笔记ID:${apiResult!['result']['id']}",
                        style: const TextStyle(color: Colors.green, fontSize: 12),
                      ),
                    ),
                  Visibility(
                    visible: isNotVisible,
                    child: Center(
                      child: Card(
                        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
                        color: Colors.grey[300],
                        child: Container(
                          padding: const EdgeInsets.all(10),
                          height: 130,
                          child: Column(
                            mainAxisSize: MainAxisSize.min,
                            children: [
                              ListTile(
                                trailing: const Icon(Icons.more_horiz),
                                leading: CircleAvatar(
                                  backgroundImage: NetworkImage(
                                      'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500'),
                                ),
                                subtitle: Text(
                                  '2 days ago',
                                  style: TextStyle(color: Colors.grey[800]),
                                ),
                              ),
                              const Text(
                                  'This is a private note that auto expands based on the text entered. The background will determine the privacy level of the post',
                                  style: TextStyle(fontSize: 10, color: Colors.black87),
                                  textAlign: TextAlign.justify),
                            ],
                          ),
                        ),
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ),
        ),
      );
}

内容的提问来源于stack exchange,提问作者Kushan De Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:06:02