Ryan Ribeiro
Ryan Ribeiro

Reputation: 13

Dart http package is not working in built apk

I'm developing a Flutter application that needs to make http requests. I installed the http package as usual, but when it came time to test the app in a real device, the http requests are hanging, I never get a response or status code. I decided then to start a new application just to mess around with http package, but still I got the same issue.

This is what I get while debugging in Android Emulator (I get a response almost immediately) and this is what I get on a real device (hanging forever).

Possible solutions I have already tried: built signed and unsigned apk, ran flutter clean before building apk, built apk using --no-shrink flag, changed the version of http package in pubspec.yaml, and none of these seemed to solve the issue.

I am using the latest stable version of Flutter SDK (v1.17.5), Android Studio for coding, and Ubuntu 20.04 as Operating System.

Here is my dart code:

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

class AuthScreen extends StatefulWidget {
  @override
  _AuthScreenState createState() => _AuthScreenState();
}

class _AuthScreenState extends State<AuthScreen> {
  final TextEditingController _urlController = TextEditingController();
  String _status = 'Waiting for request';

  void _submit() async {
    setState(() {
      _status = 'Waiting for response...';
    });
    var response = await http.get(_urlController.text);
    if (response.statusCode == 200) {
      setState(() {
        _status = response.body.substring(0, 40) + ' [...]';
      });
    } else {
      _status = 'Something went wrong';
    }
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextFormField(
              controller: _urlController,
            ),
            FlatButton(
              child: Text('Send request'),
              onPressed: _submit,
            ),
            Text(_status)
          ],
        ),
      ),
    );
  }
}

Here is my pubspec.yaml, in case it's useful:

name: testingHttpPackage
description: A new Flutter application.

publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  http: ^0.12.1
  cupertino_icons: ^0.1.3

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

Upvotes: 1

Views: 1025

Answers (1)

Saarthak Gupta
Saarthak Gupta

Reputation: 445

Did you mention internet permission in AndroidManifest.xml file? In android/app/src/main/, there is AndroidManifest.xml file, put the below line after manifest tag i.e. after the first tag.

 <uses-permission android:name="android.permission.INTERNET" />   

Upvotes: 3

Related Questions