Flutterando / modular

A smart project structure
https://pub.dev/packages/flutter_modular
Other
1.3k stars 251 forks source link

Hot Reload não funcionando em rotas com parâmetros #748

Open NeyDavid opened 2 years ago

NeyDavid commented 2 years ago

Quando tento realizar hot reload em rotas que recebe algum tipo de parâmetro, no flutter web, recebo um erro de parametro nulo:

The following TypeErrorImpl was thrown building Builder: Expected a value of type 'String', but got one of type 'Null' The relevant error-causing widget was: MaterialApp

Flutter Doctor:

[√] Flutter (Channel stable, 2.10.5, on Microsoft Windows [versão 10.0.19044.1766], locale pt-BR) • Flutter version 2.10.5 at C:\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 5464c5bac7 (2 months ago), 2022-04-18 09:55:37 -0700 • Engine revision 57d3bac3dd • Dart version 2.16.2 • DevTools version 2.9.2

[√] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) • Android SDK at C:\Users\Ney\AppData\Local\Android\sdk • Platform android-32, build-tools 32.1.0-rc1 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)
• All Android licenses accepted.

[√] Chrome - develop for the web • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[X] Visual Studio - develop for Windows X Visual Studio not installed; this is necessary for Windows development. Download at https://visualstudio.microsoft.com/downloads/. Please install the "Desktop development with C++" workload, including all of its default components

[√] Android Studio (version 2021.1) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)

[√] VS Code (version 1.68.1) • VS Code at C:\Users\Ney\AppData\Local\Programs\Microsoft VS Code • Flutter extension version 3.42.0

[√] Connected device (3 available) • Windows (desktop) • windows • windows-x64 • Microsoft Windows [versão 10.0.19044.1766] • Chrome (web) • chrome • web-javascript • Google Chrome 103.0.5060.53 • Edge (web) • edge • web-javascript • Microsoft Edge 103.0.1264.37

[√] HTTP Host Availability

PubSpec.yaml: (Venho enfrentando esse problema em um projeto grande que eu tenho, criei um projeto do zero para fazer um teste)

name: teste_hot_reload description: A new Flutter project.

publish_to: 'none' version: 1.0.0+1

environment: sdk: ">=2.16.2 <3.0.0"

dependencies: flutter: sdk: flutter

cupertino_icons: ^1.0.2 flutter_modular: ^5.0.3

dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^1.0.0

flutter: uses-material-design: true

To Reproduce: Criei um projeto do zero para reproduzir o problema, mas você pode reproduzir esse problema tendo alguma rota com parâmetro e efetuando alguma alteração nessa tela, quando você salvar pelo vscode, o hot reload irá falhar pois o seu parâmetro vai estar nulo. Testei com o Navigator.push e não enfrentei esse problema, creio que esse problema seja realmente com o modular. Creio que o comportamento normal seria ele retornar para o inicio da aplicação, ou efetuar o hot reload na mesma tela.

image image

joceljunior commented 2 years ago

Estou com o mesmo problema!

eduardoflorence commented 2 years ago

Não existe ainda no Flutter Web a funcionalidade de hot reload, somente hot restart mantendo apenas a url, logo você perde todo o seu estado. Esta é grande diferença entre desenvolver para web e para mobile. O que você pode fazer é passar o parâmetro pela URL. Exemplo: /segunda-pagina?nome=Jocel Ou armazenar o argumento via SharedPreferences e buscar dele quando não conseguir obter via rota

Fonte: https://github.com/flutter/flutter/issues/53041

joceljunior commented 2 years ago

Não existe ainda no Flutter Web a funcionalidade de hot reload, somente hot restart mantendo apenas a url, logo você perde todo o seu estado. Esta é grande diferença entre desenvolver para web e para mobile. O que você pode fazer é passar o parâmetro pela URL. Exemplo: /segunda-pagina?nome=Jocel Ou armazenar o argumento via SharedPreferences e buscar dele quando não conseguir obter via rota

Fonte: flutter/flutter#53041

Entendo isso, porem, creio que não muda o fato de ter algum erro no modular, se eu utilizo o Navigator, por exemplo, ele não me da um erro, ele automaticamente me leva para o inicio da aplicação! Estou enfrentando bastante dificuldade de produtividade, pois preciso gerar um novo build a cada alteração!

joceljunior commented 2 years ago

Temos alguma atualização sobre isso?

raphaelbarbosaqwerty commented 2 years ago

Algum de vocês tem um código que eu consiga reproduzir aqui?

joceljunior commented 2 years ago

Algum de vocês tem um código que eu consiga reproduzir aqui? Fala Kuringão, segue esse projeto que criei do zero junto com o meu brother https://github.com/NeyDavid/teste_hot_reload

eduardoflorence commented 2 years ago

Eu vi o repositório acima @joceljunior. Na Web isso sempre vai dar erro, não é culpa do Modular, como lhe expliquei no meu comentário anterior. Nem é correto voltar para o início da aplicação automaticamente como você disse que o Navigator faz, pois nos impede de tratar o problema e tomar a nossa decisão, por exemplo, fazer apenas um pop caso o nome esteja nulo.

joceljunior commented 2 years ago

Eu vi o repositório acima @joceljunior. Na Web isso sempre vai dar erro, não é culpa do Modular, como lhe expliquei no meu comentário anterior. Nem é correto voltar para o início da aplicação automaticamente como você disse que o Navigator faz, pois nos impede de tratar o problema e tomar a nossa decisão, por exemplo, fazer apenas um pop caso o nome esteja nulo.

Cara, só acho estranho que isso não acontecia antes, uso o flutter web faz um tempo relativamente grande, nunca enfrentei problema com isso! Enfim a solução é guardar os parâmetros local e sempre buscar na tela que desejar, mas isso é uma alteração muito grande no meu projeto atual! Pode não ser correto o comportamento do Navigator, mas ele me atende, o grande problema é ter que gerar um novo build a cada alteração ...

EricCastr0 commented 1 year ago

Olá você conseguiu resolver esse problema de alguma forma? Está ocorrendo o mesmo aqui comigo.

jacobaraujo7 commented 1 year ago

Poderia checar se a v6 resolveu esse problema?