Flutter problem z wersją Release

0

Tworzę aplikacje we Fluterze na ubuntu, uruchamiam lokalnie na linux-sie i wszystko dobrze działa.
Podpinam telefon, uruchamiam w trybie debug po wifi i również wszystko działa.
Tworzę jar wrzucam na ten sam tel, instaluję, aplikacja działa ale element nad którym aktualnie pracuję (pojawiający się popup po kliknięciu przycisku) zamiast się pojawić jest szary kwadrat.
Spotkał się ktoś z Was z taką sytuacją?
Nie wiem nawet jak to debugować bo jak podpinam tel przez wifi i uruchamiam wszystko ładnie działa :/

1

Dałeś bardzo mało konkretów oraz zero kodu, więc ciężko napisać coś sensownego, ale kilka myśli mi przychodzi do głowy:

  • JAR czy APK?
  • spróbuj skompilować to w wersji desktopowej a nie ma mobilka i zobacz, czy ten sam motyw występuje
  • postaraj się wyodrębnić tylko ten element, który stwarza problem do osobnego projektu i sprawdź, czy tam też się tak zachowuje. Jeśli nie - powoli dokładaj/dobudowuj resztę i zobacz, w którym momencie błąd się znowu pojawi
  • spróbuj nie wrzucać tego na telefon z poziomu IDE, ale wygenerować plik APK, wrzucić na jakiś swój serwer, potem wejść telefonem na ten adres, pobrać apkę i ją zainstalować
  • czy próbowałeś na innych telefonach (inny producent, inna wersja Androida itp.)?
  • daj proszę screena jak to wygląda poprawnie oraz po awarii
0

@cerrato oczywiście APK nie JAR mój błąd
w konsoli daje flutter clean potem flutter build apk --release wszystko się buduje, w folderze /build/app/outputs/flutter-apk mam dwa pliki:
app-release.apk
oraz
app-debug.apk
instaluje najpierw debug i jest ok potem release i już jest źle.
scrin jak wygląda popup w wersji debug oraz release:
screenshot-20240413192053.png
Sprawdzę jeszcze pozostałem punkty o których pisałeś, nie wiem tylko jak skompilować appkę do wersji desktopowej?

0

Po wielu testach udało się znaleźć przyczynę.
W wersji release nie działa taki kod:

return Expanded(
        child: SingleChildScrollView(
          physics: NeverScrollableScrollPhysics(),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              ...
            ],
          ),
        ),
      );

jednak po usunięciu Expanded form ładuje się prawidłowo:

return SingleChildScrollView(
      physics: NeverScrollableScrollPhysics(),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              ...
            ],
          ),
        );
0

tsoo?! ale że co, to błąd we Flutter czy zamierzony hack w 598 linijce dokumentacji opisany małą czcionką?

0

@marian pazdzioch raczej kwestia niedoczytania dokumentacji:

https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html

Doing so, however, usually results in a conflict between the Column, which typically tries to grow as big as it can, and the SingleChildScrollView, which provides its children with an infinite amount of space.

Tak w dużym uproszczeniu - SingleChildScrollView potrzebuje rodzica o okreslonym wymiarze, a wrzucenie go w widget typu column czy expanded, który próbuje się rozciągnąć/rozciągnąć swoje dziecko, powoduje konflikt.

Jedynie zastanawiam się, czemu w wersji debug to nie występuje. Ale wersja debug pozwala na więcej - np. te żółte paski ostrzegawcze jeśli zawartość wylewa się za brzegi ekranu itp. Więc pewnie to z tego wynika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1