Flutter Future <HttpClient> не является подтипом HttpClinet

import 'dart:io';    
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_app_retrofit/example.dart';

class _HomepageState extends State<Homepage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: FutureBuilder(
          future: this._getPosts(),
          builder: (context, snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
                return CircularProgressIndicator();
                break;
              case ConnectionState.waiting:
                return CircularProgressIndicator();
                break;
              case ConnectionState.active:
                return CircularProgressIndicator();
                break;
              case ConnectionState.done:
                return CircularProgressIndicator();
                break;

              default:
                return CircularProgressIndicator();
            }
          },),
      ),
    );
  }

  Future _getPosts() async {
    final dio= Dio();
    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = await (client) async {
      SecurityContext securityContext=new SecurityContext();
      final ByteData crtData = await rootBundle.load('assets/server.crt');
      securityContext.setTrustedCertificatesBytes(crtData.buffer.asUint8List());
      final ByteData keyBytes = await rootBundle.load('assets/server.key');
      securityContext.usePrivateKeyBytes(keyBytes.buffer.asUint8List());
      return HttpClient(context: securityContext);
    };
    final client = RestClient(dio);
    client.login('mad***h@****.in', '88888');

  }
}

Во флаттере мы получаем Dio. Я получаю сообщение об ошибке при использовании Dio. Проблема в том, что мне нужно использовать сертификат SSl. Поэтому я использовал Dio. Но теперь я получаю ошибку, указанную ниже. Необработанное исключение Future не является подтипом HttpClient.

1 ответ

Вот решение

Создайте клиент Http перед кодом дио:

SecurityContext clientContext = SecurityContext(withTrustedRoots: false);
var certificate =
    (await rootBundle.load("yourAssetCertificatePath"))
        .buffer
        .asInt8List();
clientContext.setTrustedCertificatesBytes(certificate);
HttpClient clientT = HttpClient(context: clientContext);

Затем вызовите свой dioAdapterCode:

 final dio= Dio();
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
  return clientT ;
};
final client = RestClient(dio);

Наконец, ваш метод будет:

 Future _getPosts() async {
final dio= Dio();
 SecurityContext clientContext = SecurityContext(withTrustedRoots: false);
    var certificate =
        (await rootBundle.load("yourAssetCertificatePath"))
            .buffer
            .asInt8List();
    clientContext.setTrustedCertificatesBytes(certificate);
    HttpClient clientT = HttpClient(context: clientContext);
    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =  (client)  {

  return clientT;
};
final client = RestClient(dio);
client.login('mad***h@****.in', '88888');
  }

Примечание. Проблема заключалась в использовании async/await в коде.

Сообщите мне, если проблема не исчезнет, ​​и поддержите ответ

Другие вопросы по тегам