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

Flutter应用通过HTTP请求拉取Wix数据库数据返回空白页如何解决

问题排查与解决方案

已知问题点

  • 移动端默认未开启网络权限,未配置权限的应用无法发起外部网络请求
  • 现有代码catch块未做错误日志打印,无法定位具体异常类型
  • 未校验HTTP响应状态码,接口返回异常时直接解析响应体会直接触发异常
  • Wix接口默认会校验请求头信息,Flutter默认请求头与Postman请求头不一致会被接口拦截

修复步骤

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. 修改请求代码

补充请求头模拟正常客户端请求,增加状态码校验与错误日志打印:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final url = 'https://daudadmin.editorx.io/acteeventpage/_functions/regions';
  List _postsJson = [];
  bool _isLoading = true;
  String? _errorMsg;

  void fetchData() async {
    try {
      // 补充请求头,模拟Postman请求避免被Wix拦截
      final response = await http.get(
        Uri.parse(url),
        headers: {
          "Accept": "*/*",
          "User-Agent": "PostmanRuntime/7.29.0"
        }
      );
      // 先校验响应状态码
      if (response.statusCode == 200) {
        final jsonData = jsonDecode(response.body) as List;
        setState(() {
          _postsJson = jsonData;
          _isLoading = false;
        });
      } else {
        setState(() {
          _errorMsg = "请求异常,状态码:${response.statusCode},响应内容:${response.body}";
          _isLoading = false;
        });
        debugPrint(_errorMsg);
      }
    } catch (err, stack) {
      setState(() {
        _errorMsg = "请求错误:$err";
        _isLoading = false;
      });
      // 打印错误栈方便定位
      debugPrint("请求异常:$err,堆栈:$stack");
    }
  }

  @override
  void initState() {
    super.initState();
    fetchData();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: _buildBody(),
      ),
    );
  }

  Widget _buildBody() {
    if (_isLoading) {
      return const Center(child: CircularProgressIndicator());
    }
    if (_errorMsg != null) {
      return Center(child: Text(_errorMsg!));
    }
    return ListView.builder(
      itemCount: _postsJson.length,
      itemBuilder: (context, i) {
        final post = _postsJson[i];
        return Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text("Title: ${post["title"] ?? "无标题"}"),
        );
      }
    );
  }
}

额外说明

修改后运行应用,控制台会打印具体的异常信息,可根据打印内容进一步调整配置。如果出现证书校验异常,测试环境可临时配置http客户端忽略证书校验,正式环境需确认Wix域名证书有效性。

内容的提问来源于stack exchange,提问作者Dee Jott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:03