Как решить проблему небезопасного http, не допускаемого колебаниями платформы?

Я пытаюсь получить некоторые данные из своего пользовательского API для отдыха, и у меня много проблем с этой ошибкой. Я даже попробовал официальное руководство по миграции Google.

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

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  String PROTOCOL = "http";
  String DOMAIN = "192.168.0.5:5000";

  Future<List<dynamic>> fetchUsers() async {
    var url = "$PROTOCOL://$DOMAIN/posts";
    var result = await http.get(url);
    print(result);
    return json.decode(result.body);
  }

  @override
  Widget build(BuildContext context) {
    fetchUsers();
    return Scaffold(
      appBar: AppBar(),
      body: Container(
        child: FutureBuilder<List<dynamic>>(
          future: fetchUsers(),
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                itemBuilder: (BuildContext context, int index) {
                  return Text(snapshot.data[index]['description']);
                },
                itemCount: snapshot.data.length,
              );
            } else
              return Container();
          },
        ),
      ),
    );

Мой сервер запущен и работает нормально с почтальоном, но у меня проблемы с флаттером. Здесь нужна серьезная помощь!


person Himanshu Ranjan    schedule 01.10.2020    source источник
comment
Можете ли вы опубликовать фактическую ошибку, с которой столкнулись?   -  person Xoltawn    schedule 02.10.2020
comment
Небезопасный http не разрешен платформой.   -  person Himanshu Ranjan    schedule 02.10.2020


Ответы (3)


Чтобы временно решить вашу проблему. Сначала добавьте конфигурацию в папку res / xml (мой полный путь - /Users/dolphin/source/third-party/Cruise/android/app/src/main/res/xml):

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

затем в вашем файле AndroidManifest.xml добавьте эту конфигурацию:

android:networkSecurityConfig="@xml/network_security_config"

это может разрешить HTTP-трафик. Но он используется только для отладки, лучший способ - использовать трафик https. дополнительная информация: Как разрешить все типы сетевых подключений HTTP и HTTPS в Android (9) Pie?

Это решило мою проблему. Надеюсь, это поможет вам!

person Dolphin    schedule 04.10.2020

Добавьте эти строки в тег активности AndroidManifest.xml

 android:usesCleartextTraffic="true"
 android:networkSecurityConfig="@xml/network_security_resource"

В res создайте новую папку с именем xml в папке res.

Создайте новый XML-файл с именем network_security_resource.xml в папке xml.

Добавьте к нему приведенный ниже код -

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>
</network-security-config>

Затем следуйте инструкциям, приведенным здесь https://flutter.dev/docs/release/breaking-changes/network-policy-ios-android https://developer.android.com/training/articles/security-config

Если вышеуказанные шаги не работают. Попробуйте изменить ветку flutter и обновить ее.

Я сделал и то, и другое, и теперь все работает. Я использую Flutter 1.22.0 • стабильный канал

person Sarthak Singhal    schedule 02.10.2020

Простое решение для этого

Я использовал

final String baseUrl='http://......herokuapp.com/';

этот URL-адрес, который давал мне это исключение, но затем я сделал http на https

final String baseUrl='https://......herokuapp.com/';

это связано с безопасностью некоторых мобильных телефонов

и это сработало для меня заранее спасибо!

person Vaibhav Pallod    schedule 14.12.2020