Saya sedang mengembangkan aplikasi Flutter yang perlu membuat permintaan http. Saya menginstal paket http seperti biasa, tetapi ketika tiba saatnya untuk menguji aplikasi di perangkat nyata, permintaan http menggantung, saya tidak pernah mendapatkan respons atau kode status. Saya kemudian memutuskan untuk memulai aplikasi baru hanya untuk dipusingkan dengan paket http, tetapi saya masih mendapatkan masalah yang sama.

Inilah yang saya dapatkan saat men-debug di Android Emulator (saya langsung mendapat respons) dan ini yang saya dapatkan di perangkat nyata (bergantung selamanya).

Kemungkinan solusi yang sudah saya coba: membangun apk yang ditandatangani dan tidak ditandatangani, menjalankan flutter clean sebelum membangun apk, membangun apk menggunakan flag --no-shrink, mengubah versi paket http di pubspec.yaml, dan tidak satu pun dari ini yang menyelesaikan masalah .

Saya menggunakan Flutter SDK versi stabil terbaru (v1.17.5), Android Studio untuk pengkodean, dan Ubuntu 20.04 sebagai Sistem Operasi.

Ini kode panah saya:

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)
          ],
        ),
      ),
    );
  }
}

Ini pubspec.yaml saya, semoga bermanfaat:

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
0
Ryan Ribeiro 4 Juli 2020, 20:34

1 menjawab

Jawaban Terbaik

Apakah Anda menyebutkan izin internet dalam file AndroidManifest.xml? Di android/app/src/main/, ada file AndroidManifest.xml, letakkan baris di bawah ini setelah tag manifes yaitu setelah tag pertama.

 <uses-permission android:name="android.permission.INTERNET" />   
1
Saarthak Gupta 4 Juli 2020, 17:52