Flutter GetX的GetConnect无法连接到Android上的http

siv3szwd  于 2023-05-30  发布在  Flutter
关注(0)|答案(1)|浏览(163)

我有一个Flutter/GetX项目,它成功地从iOS调用了http REST API,但在Android上却无法正常工作。我的AndroidManifest.xml文件显示如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.vending_consumer">
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.CAMERA" />
    
        <application
            android:label="vending_consumer"
            android:name="${applicationName}"
            android:icon="@mipmap/ic_launcher"
            android:usesCleartextTraffic="true">
            ....
        </application>
    </manifest>

所以这应该意味着:

  • 应用程序已被授予internet访问权限
  • 应用程序已启用明文http

不幸的是,REST API调用在Android上不起作用...但在iOS上运行良好。
我正在使用Flutter和GetX,因此我的提供程序类如下所示:

class ConsumerProvider extends GetConnect {
    late String token;
    late Map<String, String> _mainHeaders;
    
    ConsumerProvider() {
        timeout = const Duration(seconds: 30);
        _mainHeaders = {
            'accept': '*/*',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Request-Method': 'GET',
            'Access-Control-Request-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
            };
        }
    
    @override
    void onInit() {
        super.onInit();
        httpClient.baseUrl = 'http://localhost:7001/';
        httpClient.defaultContentType = "application/json";
        httpClient.timeout = const Duration(seconds: 8);
    }
    
    Future<Consumer> getConsumerByMobileNumber(String mobileNumber) async {
        String url = 'enterprise/masterdata/party/consumers/byMobileNumber/$mobileNumber';
        final Response response = await get(url);
        if (response.status.hasError) {
            debugPrint('[ConsumerProvider getConsumerByMobileNumber] status: ${response.status.code}');
            debugPrint('[ConsumerProvider getConsumerByMobileNumber] response: ${response.body}');
            return Future.error(response.body);
        } else {
            return Consumer.fromJson(response.body);
        }
        }
        ....
    }

GET API返回的响应体在Android上只是null。永远不会调用服务器。但是,这在iOS上工作得很好。
好奇是否有我遗漏的其他Flutter或GetX配置?反馈是肯定赞赏。

b5buobof

b5buobof1#

问题是在我的URL中使用“localhost”。iOS模拟器能够理解这一点,但Android模拟器却不能。一旦将“localhost”替换为“192.168.0.x”,一切都正常。

相关问题