Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Quando tento rodar o app recebo uma mensagem de erro

Quando tento gravar uma transaction recebo a seguinte mensagem:

E/flutter ( 6571): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: E/flutter ( 6571): WRONG_VERSION_NUMBER(tls_record.cc:242))

6 respostas

Bom dia Sergio, tudo beleza?

Vou pedir pra você me mandar o Log do erro completo, pode ser? Assim eu posso ter uma boa ideia do problema completo :)

Normalmente esse problema acontece porque está usando https:// no seu link, tente mudar para http:// e veja se funciona.

Espero pela sua resposta.

Segue o log completo:

I/flutter ( 6571): Request I/flutter ( 6571): url: https://192.168.0.23:8080/transactions I/flutter ( 6571): headers: {Content-type: application/json; charset=utf-8, password: 1000} I/flutter ( 6571): body: {"value":200.0,"contact":{"name":"Sérgio","accountNumber":1000}} I/flutter ( 6571): Request I/flutter ( 6571): url: https://192.168.0.23:8080/transactions I/flutter ( 6571): headers: {Content-type: application/json; charset=utf-8, password: 1000} I/flutter ( 6571): body: {"value":200.0,"contact":{"name":"Sérgio","accountNumber":1000}} E/flutter ( 6571): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: E/flutter ( 6571): WRONG_VERSION_NUMBER(tls_record.cc:242)) E/flutter ( 6571): E/flutter ( 6571): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: E/flutter ( 6571): WRONG_VERSION_NUMBER(tls_record.cc:242)) E/flutter ( 6571): F/crash_dump32(31673): crash_dump.cpp:474] failed to attach to thread 182: Permission denied

Quando eu altero o https para o http eu recebo outra mensagem de erro:

I/flutter ( 6571): Request I/flutter ( 6571): url: http://192.168.0.23:8080/transactions I/flutter ( 6571): headers: {Content-type: application/json; charset=utf-8, password: 1000} I/flutter ( 6571): body: {"value":200.0,"contact":{"name":"Sérgio","accountNumber":1000}} E/flutter ( 6571): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Bad state: Insecure HTTP is not allowed by platform: http://192.168.0.23:8080/transactions E/flutter ( 6571): #0 HttpClient.openUrl (dart:http/httpimpl.dart:2434:7) E/flutter ( 6571): #1 HttpClient.openUrl (dart:http/http_impl.dart:2341:7) E/flutter ( 6571): #2 IOClient.send (package:http/src/io_client.dart:30:38) E/flutter ( 6571): #3 HttpClientWithInterceptor.send (package:http_interceptor/http_client_with_interceptor.dart:153:20) E/flutter ( 6571): #4 HttpClientWithInterceptor.attemptRequest (package:httpinterceptor/http_client_with_interceptor.dart:207:19) E/flutter ( 6571): E/flutter ( 6571): #5 HttpClientWithInterceptor.sendUnstreamed (package:httpinterceptor/http_client_with_interceptor.dart:181:20) E/flutter ( 6571): E/flutter ( 6571): #6 TransactionWebClient.save (package:bytebank/http/webclients/transaction_webclient.dart:20:31) E/flutter ( 6571): E/flutter ( 6571): #7 TransactionFormState.build.. (package:bytebank/screens/transactionform.dart) E/flutter ( 6571):

Oi Sergio boa tarde, dei uma olhada a fundo no problema e descobri como resolveremos! Vamos lá:

Primeiramente, continue usando o HTTP okay? Em seguida vamos lá no nosso Android Manifest:

  • seuApp\android\app\src\debug\AndroidManifest.xml.

E vamos adicionar essas duas linha de código nele:

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

Entendendo a causa do problema:

Nas novas versões do dart, foi criado uma segurança para conexões que impede conexões locais http de ocorrerem, você pode ler com mais calma aqui: https://medium.com/flutter-community/solving-the-new-https-requirements-in-flutter-7abe240fbf23

Boa tarde,

Kako, eu já havia visto esse artigo, porém quando eu tento inserir no AndroidManifest eu recebo uma mensagem de erro:

Attribute android:usesCleartextTraffic is not allowed here

Estou colando o texto:

<application android:usesCleartextTraffic="true">
</application>

Exatamente na sequencia do <uses-permission>

Outro ponto é que para que o restante do código funcionasse eu tive que fazer uma adaptação no transaction_webclient.dart. Em todos os locais onde const String baseUrl aparece eu precisei colocar Uri.tryparse(baseUrl) senão aparecia uma mensagem de erro dizendo que Uri não consegue ler String.

solução!

Hum... Interessante, vou conversar com os outros da Equipe, vamos fazer uma atualização urgente nesse curso, para que seu problema não torne a acontecer, obrigado de verdade pela paciência.

Agora para resolver seu problema do AndroidManifest vou pedir pra você ir em File -> Invalidate Cache / Restart e por fim reiniciar o Android Studio.

Obrigado, dessa vez funcionou corretamente.

Eu só precisei fazer outra alteração no logging_interceptor.dart. Na aula dentro da classe LoggingInterceptor estava assim:

print('url: ${data.requestUrl}'); mas desse jeito estava dando erro, eu passei para:

print('url: ${data.url}') e aí ficou redondo.