在 Debian 上解决 Flutter 网络请求问题的完整步骤
一 环境准备与项目初始化
export PATH="$PATH:~/flutter/bin",执行 source ~/.bashrc 生效)。flutter create my_flutter_app && cd my_flutter_app。dependencies:
flutter:
sdk: flutter
http: ^最新版本号
然后运行 flutter pub get 安装依赖。二 配置权限与平台要点
<uses-permission android:name="android.permission.INTERNET"/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
上线前应改为更严格的域名白名单策略,避免安全风险。三 编写与验证网络请求
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Network Demo')),
body: const NetworkWidget(),
),
);
}
}
class NetworkWidget extends StatefulWidget {
const NetworkWidget({Key? key}) : super(key: key);
@override
State<NetworkWidget> createState() => _NetworkWidgetState();
}
class _NetworkWidgetState extends State<NetworkWidget> {
String _title = 'Loading...';
@override
void initState() {
super.initState();
_load();
}
Future<void> _load() async {
final uri = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
try {
final resp = await http.get(uri);
if (resp.statusCode == 200) {
final data = json.decode(resp.body);
setState(() => _title = data['title'] as String);
} else {
setState(() => _title = 'Error: ${resp.statusCode}');
}
} catch (e) {
setState(() => _title = 'Exception: $e');
}
}
@override
Widget build(BuildContext context) => Center(child: Text(_title));
}
flutter run,确认能正常请求并显示数据。若失败,优先检查依赖是否安装、目标地址是否可达、以及平台权限是否配置。四 调试与抓包定位
五 常见故障排查清单
flutter pub get,import 'package:http/http.dart' as http; 无误,且请求地址使用 HTTPS/HTTP 与你的服务器一致。NSAllowsArbitraryLoads,上线前改为按域名配置的白名单策略。