Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with Hot reload #1556

Closed
rkleivel opened this issue Jul 6, 2023 · 20 comments
Closed

Issue with Hot reload #1556

rkleivel opened this issue Jul 6, 2023 · 20 comments

Comments

@rkleivel
Copy link

rkleivel commented Jul 6, 2023

Description
First! Thanks so much for an AWESOME library 馃憤

I cannot seem to get hot reload work reliably in Ubuntu native window.

Code example to reproduce the issue:
Using the counter example from flet docs:

import flet as ft

def main(page: ft.Page):
    page.title = "Flet counter example"
    page.vertical_alignment = ft.MainAxisAlignment.CENTER

    txt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)

    def minus_click(e):
        txt_number.value = str(int(txt_number.value) - 1)
        page.update()

    def plus_click(e):
        txt_number.value = str(int(txt_number.value) + 1)
        page.update()

    page.add(
        ft.Row(
            [
                ft.IconButton(ft.icons.REMOVE, on_click=minus_click),
                txt_number,
                ft.IconButton(ft.icons.ADD, on_click=plus_click),
            ],
            alignment=ft.MainAxisAlignment.CENTER,
        )
    )

ft.app(target=main)

Describe the results you received:

  • When starting my app in OS native window with flet run counter.py the app stops responding if I change the code (for example just adding a blank line) and save (see screenshot below)
  • If I start the app in browser with flet run --web --port 1234 counter.py the app reloads with new code after saving change as expected.

image

Waiting long enough I sometimes get a response like this

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Stack Overflow
#0      String._concatAll (dart:core-patch/string_patch.dart)
#1      _StringBase._interpolate (dart:core-patch/string_patch.dart)
#2      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#3      FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#4      main.<anonymous closure> (package:flet_client/main.dart)
#5      FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#6      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#7      FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#8      main.<anonymous closure> (package:flet_client/main.dart)
#9      FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#10     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#11     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#12     main.<anonymous closure> (package:flet_client/main.dart)
.
.
.
#98216  main.<anonymous closure> (package:flet_client/main.dart)
#98217  FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#98218  ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#98219  FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#98220  main.<anonymous closure> (package:flet_client/main.dart)
#98221  FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#98222  ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#98223  FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#98224  main.<anonymous closure> (package:flet_client/main.dart)
#98225  PlatformDispatcher._dispatchError (dart:ui/platform_dispatcher.dart)
#98226  _onError (dart:ui/hooks.dart)

Describe the results you expected:
Would expect hot reload in OS native window to work like in browser

Additional information you deem important (e.g. issue happens only occasionally):
It seems to work as expected like 1 of 20 times.

Flet version (pip show flet):

Name: flet
Version: 0.8.0
Summary: Flet for Python - easily build interactive multi-platform apps in Python
Home-page: 
Author: Appveyor Systems Inc.
Author-email: hello@flet.dev
License: Apache-2.0
Location: /home/roald/KMM/CODE_TESTING/flet-testing-py3_10/.venv/lib/python3.10/site-packages
Requires: copier, flet-runtime, packaging, pydantic, qrcode, watchdog, websocket-client, websockets
Required-by: 

Operating system:

Reproduced on 2 different computers:

  • Ubuntu 20.04 python3.8.10
  • Ubuntu 22.04 python3.10.6
  • Ubuntu 22.04 python3.11.4

Additional environment details:

@FeodorFitsner
Copy link
Contributor

Looking into that.

@hexbenjamin
Copy link

glad to hear it's being looked at! you should know - the same issue is happening for me on win10

@FeodorFitsner
Copy link
Contributor

I'm testing hot reload with the latest Flet on Ubuntu 22.04 and it's working quite well:

flet-on-ubuntu-22.04-arm.mp4

@rkleivel
Copy link
Author

rkleivel commented Jul 7, 2023

Thanks for looking into this :)
Here is a recording reproducing the problem:
flet-run-ubuntu-22.04-hangs-on-hot-reload.webm

NOTE: When the native window starts hanging, the flet process (I highlight it in the htop window in video) takes all cpu of one core. (In this recording the impression gets disturbed by also the screen recorder taking a lot of cpu, but when I'm not recording the highlighted flet process is the dominant cpu consumer)

I notice that your video filename indicates that you have an arm processor(?) I have Intel i7 - not sure if that is of any interest.

Thankful for any ideas!

@rkleivel
Copy link
Author

Trying to narrow down the root cause I have tried to reproduce the issue in 4 different environments:

  • virtualbox, brand new Ubuntu 22.04 guest running on the Ubuntu 22.04 host where I recorded the video in previous comment
    • result: Issue Reproduced
  • a windows 10 installation with Anaconda on the same computer (dual-boot) as in previous comment
    • result: Issue NOT reproduced
  • a computer with xUbuntu 22.04
    • result: Issue Reproduced
  • another smaller laptop with windows 10 / Anaconda
    • result: Issue NOT reproduced

@rkleivel
Copy link
Author

Issue is now also reproduced on Raspberry Pi OS (Raspbian based on Debian 11 / Bullseye) on a Raspberry Pi 4 with ARM processor.

Before I potentially waste more of our valuable time on this I would highly appreciate if @FeodorFitsner or someone in the community would validate my reproduction procedure shown in the video below. Is this correct installation and use of flet? Or am I misunderstanding something basic here?

Video shows installation of flet in a virtual environment on a fresh Ubuntu 22.04 installation, then create and run a basic test app. When saving an update to the app file, hot reload does not work, and flet starts to eat cpu and memory.

Thanks :)

flet-run-hot-reload-test.mp4

@rkleivel
Copy link
Author

glad to hear it's being looked at! you should know - the same issue is happening for me on win10

@hexbenjamin - Would you be able to demonstrate (for example in a similar video) this issue on win10? I have tested on 2x win10 computers (with Anaconda) and not been able to reproduce there.
Wish you a nice day :)

@hexbenjamin
Copy link

@hexbenjamin - Would you be able to demonstrate (for example in a similar video) this issue on win10?

i'm actually more than a little suspicious of the specific computer im encountering the issue on, but ill have a new one this week (ironically). i'll test on the new one and open a new issue if i'm able to reproduce it. will reference this issue if it comes to it!

thanks for the help @rkleivel !!!

@rkleivel
Copy link
Author

So - I really spent some effort trying to digging this down. Added some logging, now the main.py looks like this:

import flet as ft
import logging

LOGGING_FORMAT = '%(asctime)s [%(threadName)-20.20s] [%(levelname)-8.8s] %(message)s | %(filename)s: %(funcName)s(), line %(lineno)s' 
logging.basicConfig(
    filename='example.log', 
    encoding='utf-8', 
    level=logging.DEBUG,
    format=LOGGING_FORMAT
)

def main(page: ft.Page):
    page.add(ft.Text("Hello  4567"))

ft.app(target=main)

Mostly the flet app window hangs at the first hot reload attempt, but I was patient and was able to capture a sequence of 2 successful hot reloads, followed by an unsuccessful. Here are the logging results:

Start the app with flet run main.py, and move it to a convenient place on the screen

2023-07-20 10:59:01,023 [MainThread          ] [INFO    ] Assets path configured: /home/roald/KMM/CODE_TESTING/flet-run-test/assets | app.py: __get_assets_dir_path(), line 607
2023-07-20 10:59:01,023 [MainThread          ] [INFO    ] Starting up UDS server on /tmp/awhSlXMOxJ | sync_local_socket_connection.py: connect(), line 62
2023-07-20 10:59:01,023 [Thread-1 (__connecti] [DEBUG   ] Waiting for a client connection | sync_local_socket_connection.py: __connection_loop(), line 144
2023-07-20 10:59:01,023 [MainThread          ] [INFO    ] Connected to Flet app and handling user sessions... | app.py: __app_sync(), line 163
2023-07-20 10:59:01,310 [Thread-1 (__connecti] [DEBUG   ] Connection from  | sync_local_socket_connection.py: __connection_loop(), line 147
2023-07-20 10:59:01,310 [Thread-1 (__connecti] [DEBUG   ] Message size: 274 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,310 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"registerWebClient","payload":{"pageName":"tmp/awhSlXMOxJ","pageRoute":"/","pageWidth":"0.0","pageHeight":"0.0","windowWidth":"1280.0","windowHeight":"720.0","windowTop":"23.0","windowLeft":"26.0","isPWA":"false","isWeb":"false","platform":"linux","sessionId":""}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,310 [Thread-1 (__connecti] [DEBUG   ] __send: {"action":"registerWebClient","payload":{"session":{"id":"","controls":{"page":{"i":"page","t":"page","p":"","c":[],"route":"/","width":"0.0","height":"0.0","windowwidth":"1280.0","windowheight":"720.0","windowtop":"23.0","windowleft":"26.0","pwa":"false","web":"false","platform":"linux"}}},"error":"","appInactive":false}} | sync_local_socket_connection.py: __send(), line 161
2023-07-20 10:59:01,310 [Thread-1 (__connecti] [DEBUG   ] Sent: 328 | sync_local_socket_connection.py: __send_msg(), line 169
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'route'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'pwa'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'web'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'platform'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'width'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'height'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowWidth'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowHeight'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowTop'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowLeft'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'clientIP'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'clientUserAgent'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,311 [Thread-2 (on_session] [INFO    ] Session started:  | app.py: on_session_created(), line 354
2023-07-20 10:59:01,312 [Thread-2 (on_session] [DEBUG   ] _process_command: add [] {'to': 'page', 'at': '0'} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,312 [Thread-2 (on_session] [DEBUG   ] _process_command: add [] {'to': 'page', 'at': '1'} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:01,312 [Thread-2 (on_session] [DEBUG   ] __send: {"action":"pageControlsBatch","payload":[{"action":"addPageControls","payload":{"controls":[{"t":"view","i":"_1","p":"page","c":["_2"],"at":"0"},{"t":"text","i":"_2","p":"_1","c":[],"value":"Hello  4567"}],"trimIDs":[]}},{"action":"addPageControls","payload":{"controls":[{"t":"offstage","i":"_3","p":"page","c":["_4"],"at":"1"},{"t":"clipboard","i":"_4","p":"_3","c":[]}],"trimIDs":[]}}]} | sync_local_socket_connection.py: __send(), line 161
2023-07-20 10:59:01,312 [Thread-2 (on_session] [DEBUG   ] Sent: 393 | sync_local_socket_connection.py: __send_msg(), line 169
2023-07-20 10:59:01,319 [Thread-1 (__connecti] [DEBUG   ] Message size: 113 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,320 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"updateControlProps","payload":{"props":[{"i":"page","width":"1280.0"},{"i":"page","height":"720.0"}]}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,320 [Thread-3 (on_event) ] [INFO    ] page.on_event: page change [{"i":"page","width":"1280.0"},{"i":"page","height":"720.0"}] | page.py: on_event(), line 458
2023-07-20 10:59:01,320 [Thread-1 (__connecti] [DEBUG   ] Message size: 110 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,320 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"resize","eventData":"1280.0,720.0"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,320 [Thread-4 (on_event) ] [INFO    ] page.on_event: page resize 1280.0,720.0 | page.py: on_event(), line 458
2023-07-20 10:59:01,467 [Thread-1 (__connecti] [DEBUG   ] Message size: 137 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,467 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"error","eventData":"Null check operator used on a null value"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,467 [Thread-6 (on_event) ] [INFO    ] page.on_event: page error Null check operator used on a null value | page.py: on_event(), line 458
2023-07-20 10:59:01,515 [Thread-1 (__connecti] [DEBUG   ] Message size: 137 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,515 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"error","eventData":"Null check operator used on a null value"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,516 [Thread-8 (on_event) ] [INFO    ] page.on_event: page error Null check operator used on a null value | page.py: on_event(), line 458
2023-07-20 10:59:01,516 [Thread-1 (__connecti] [DEBUG   ] Message size: 345 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,516 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"updateControlProps","payload":{"props":[{"i":"page","windowwidth":"1280.0"},{"i":"page","windowheight":"720.0"},{"i":"page","windowtop":"23.0"},{"i":"page","windowleft":"26.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}]}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,516 [Thread-10 (on_event)] [INFO    ] page.on_event: page change [{"i":"page","windowwidth":"1280.0"},{"i":"page","windowheight":"720.0"},{"i":"page","windowtop":"23.0"},{"i":"page","windowleft":"26.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}] | page.py: on_event(), line 458
2023-07-20 10:59:01,516 [Thread-1 (__connecti] [DEBUG   ] Message size: 109 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:01,517 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"window_event","eventData":"focus"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:01,517 [Thread-11 (on_event)] [INFO    ] page.on_event: page window_event focus | page.py: on_event(), line 458
2023-07-20 10:59:04,110 [Thread-1 (__connecti] [DEBUG   ] Message size: 345 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:04,110 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"updateControlProps","payload":{"props":[{"i":"page","windowwidth":"1280.0"},{"i":"page","windowheight":"720.0"},{"i":"page","windowtop":"23.0"},{"i":"page","windowleft":"26.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}]}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:04,111 [Thread-13 (on_event)] [INFO    ] page.on_event: page change [{"i":"page","windowwidth":"1280.0"},{"i":"page","windowheight":"720.0"},{"i":"page","windowtop":"23.0"},{"i":"page","windowleft":"26.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}] | page.py: on_event(), line 458
2023-07-20 10:59:04,111 [Thread-1 (__connecti] [DEBUG   ] Message size: 108 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:04,111 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"window_event","eventData":"blur"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:04,111 [Thread-14 (on_event)] [INFO    ] page.on_event: page window_event blur | page.py: on_event(), line 458
2023-07-20 10:59:04,458 [Thread-1 (__connecti] [DEBUG   ] Message size: 349 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:04,458 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"updateControlProps","payload":{"props":[{"i":"page","windowwidth":"1855.0"},{"i":"page","windowheight":"1003.0"},{"i":"page","windowtop":"251.0"},{"i":"page","windowleft":"2013.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}]}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:04,458 [Thread-16 (on_event)] [INFO    ] page.on_event: page change [{"i":"page","windowwidth":"1855.0"},{"i":"page","windowheight":"1003.0"},{"i":"page","windowtop":"251.0"},{"i":"page","windowleft":"2013.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}] | page.py: on_event(), line 458
2023-07-20 10:59:04,459 [Thread-1 (__connecti] [DEBUG   ] Message size: 109 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:04,459 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"window_event","eventData":"focus"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:04,459 [Thread-17 (on_event)] [INFO    ] page.on_event: page window_event focus | page.py: on_event(), line 458
2023-07-20 10:59:04,627 [Thread-1 (__connecti] [DEBUG   ] Message size: 410 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:04,628 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"updateControlProps","payload":{"props":[{"i":"page","width":"1855.0"},{"i":"page","height":"1003.0"},{"i":"page","windowwidth":"1855.0"},{"i":"page","windowheight":"1003.0"},{"i":"page","windowtop":"251.0"},{"i":"page","windowleft":"2013.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}]}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:04,628 [Thread-19 (on_event)] [INFO    ] page.on_event: page change [{"i":"page","width":"1855.0"},{"i":"page","height":"1003.0"},{"i":"page","windowwidth":"1855.0"},{"i":"page","windowheight":"1003.0"},{"i":"page","windowtop":"251.0"},{"i":"page","windowleft":"2013.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}] | page.py: on_event(), line 458
2023-07-20 10:59:04,628 [Thread-1 (__connecti] [DEBUG   ] Message size: 111 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:04,628 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"resize","eventData":"1855.0,1003.0"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:04,628 [Thread-20 (on_event)] [INFO    ] page.on_event: page resize 1855.0,1003.0 | page.py: on_event(), line 458
2023-07-20 10:59:05,776 [Thread-1 (__connecti] [DEBUG   ] Message size: 349 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:05,776 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"updateControlProps","payload":{"props":[{"i":"page","windowwidth":"1855.0"},{"i":"page","windowheight":"1003.0"},{"i":"page","windowtop":"251.0"},{"i":"page","windowleft":"2013.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}]}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:05,777 [Thread-22 (on_event)] [INFO    ] page.on_event: page change [{"i":"page","windowwidth":"1855.0"},{"i":"page","windowheight":"1003.0"},{"i":"page","windowtop":"251.0"},{"i":"page","windowleft":"2013.0"},{"i":"page","windowminimized":"false"},{"i":"page","windowmaximized":"false"},{"i":"page","windowfocused":"false"},{"i":"page","windowfullscreen":"false"}] | page.py: on_event(), line 458
2023-07-20 10:59:05,777 [Thread-1 (__connecti] [DEBUG   ] Message size: 108 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:05,777 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"pageEventFromWeb","payload":{"eventTarget":"page","eventName":"window_event","eventData":"blur"}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:05,777 [Thread-23 (on_event)] [INFO    ] page.on_event: page window_event blur | page.py: on_event(), line 458

Then updating main.py with touch main.py. Hot reload works:

2023-07-20 10:59:16,499 [MainThread          ] [DEBUG   ] Gracefully terminating Flet app... | app.py: exit_gracefully(), line 157
2023-07-20 10:59:16,499 [MainThread          ] [DEBUG   ] Closing connection... | sync_local_socket_connection.py: close(), line 133
2023-07-20 10:59:16,730 [MainThread          ] [INFO    ] Assets path configured: /home/roald/KMM/CODE_TESTING/flet-run-test/assets | app.py: __get_assets_dir_path(), line 607
2023-07-20 10:59:16,730 [MainThread          ] [INFO    ] Starting up UDS server on /tmp/awhSlXMOxJ | sync_local_socket_connection.py: connect(), line 62
2023-07-20 10:59:16,730 [Thread-1 (__connecti] [DEBUG   ] Waiting for a client connection | sync_local_socket_connection.py: __connection_loop(), line 144
2023-07-20 10:59:16,731 [MainThread          ] [INFO    ] Connected to Flet app and handling user sessions... | app.py: __app_sync(), line 163
2023-07-20 10:59:16,731 [Thread-1 (__connecti] [DEBUG   ] Connection from  | sync_local_socket_connection.py: __connection_loop(), line 147
2023-07-20 10:59:16,731 [Thread-1 (__connecti] [DEBUG   ] Message size: 278 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:16,731 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"registerWebClient","payload":{"pageName":"tmp/awhSlXMOxJ","pageRoute":"/","pageWidth":"0.0","pageHeight":"0.0","windowWidth":"1855.0","windowHeight":"1003.0","windowTop":"251.0","windowLeft":"2013.0","isPWA":"false","isWeb":"false","platform":"linux","sessionId":""}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:16,732 [Thread-1 (__connecti] [DEBUG   ] __send: {"action":"registerWebClient","payload":{"session":{"id":"","controls":{"page":{"i":"page","t":"page","p":"","c":[],"route":"/","width":"0.0","height":"0.0","windowwidth":"1855.0","windowheight":"1003.0","windowtop":"251.0","windowleft":"2013.0","pwa":"false","web":"false","platform":"linux"}}},"error":"","appInactive":false}} | sync_local_socket_connection.py: __send(), line 161
2023-07-20 10:59:16,732 [Thread-1 (__connecti] [DEBUG   ] Sent: 332 | sync_local_socket_connection.py: __send_msg(), line 169
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'route'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'pwa'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'web'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'platform'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'width'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'height'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowWidth'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,732 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowHeight'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowTop'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowLeft'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'clientIP'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'clientUserAgent'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [INFO    ] Session started:  | app.py: on_session_created(), line 354
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] _process_command: add [] {'to': 'page', 'at': '0'} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] _process_command: add [] {'to': 'page', 'at': '1'} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] __send: {"action":"pageControlsBatch","payload":[{"action":"addPageControls","payload":{"controls":[{"t":"view","i":"_1","p":"page","c":["_2"],"at":"0"},{"t":"text","i":"_2","p":"_1","c":[],"value":"Hello  4567"}],"trimIDs":[]}},{"action":"addPageControls","payload":{"controls":[{"t":"offstage","i":"_3","p":"page","c":["_4"],"at":"1"},{"t":"clipboard","i":"_4","p":"_3","c":[]}],"trimIDs":[]}}]} | sync_local_socket_connection.py: __send(), line 161
2023-07-20 10:59:16,733 [Thread-2 (on_session] [DEBUG   ] Sent: 393 | sync_local_socket_connection.py: __send_msg(), line 169

Again updating main.py with touch main.py. Hot reload works now as well:

2023-07-20 10:59:27,321 [MainThread          ] [DEBUG   ] Gracefully terminating Flet app... | app.py: exit_gracefully(), line 157
2023-07-20 10:59:27,321 [MainThread          ] [DEBUG   ] Closing connection... | sync_local_socket_connection.py: close(), line 133
2023-07-20 10:59:27,552 [MainThread          ] [INFO    ] Assets path configured: /home/roald/KMM/CODE_TESTING/flet-run-test/assets | app.py: __get_assets_dir_path(), line 607
2023-07-20 10:59:27,552 [MainThread          ] [INFO    ] Starting up UDS server on /tmp/awhSlXMOxJ | sync_local_socket_connection.py: connect(), line 62
2023-07-20 10:59:27,552 [Thread-1 (__connecti] [DEBUG   ] Waiting for a client connection | sync_local_socket_connection.py: __connection_loop(), line 144
2023-07-20 10:59:27,552 [MainThread          ] [INFO    ] Connected to Flet app and handling user sessions... | app.py: __app_sync(), line 163
2023-07-20 10:59:27,553 [Thread-1 (__connecti] [DEBUG   ] Connection from  | sync_local_socket_connection.py: __connection_loop(), line 147
2023-07-20 10:59:27,553 [Thread-1 (__connecti] [DEBUG   ] Message size: 278 | sync_local_socket_connection.py: __recv_msg(), line 179
2023-07-20 10:59:27,553 [Thread-1 (__connecti] [DEBUG   ] _on_message: {"action":"registerWebClient","payload":{"pageName":"tmp/awhSlXMOxJ","pageRoute":"/","pageWidth":"0.0","pageHeight":"0.0","windowWidth":"1855.0","windowHeight":"1003.0","windowTop":"251.0","windowLeft":"2013.0","isPWA":"false","isWeb":"false","platform":"linux","sessionId":""}} | sync_local_socket_connection.py: __on_message(), line 73
2023-07-20 10:59:27,554 [Thread-1 (__connecti] [DEBUG   ] __send: {"action":"registerWebClient","payload":{"session":{"id":"","controls":{"page":{"i":"page","t":"page","p":"","c":[],"route":"/","width":"0.0","height":"0.0","windowwidth":"1855.0","windowheight":"1003.0","windowtop":"251.0","windowleft":"2013.0","pwa":"false","web":"false","platform":"linux"}}},"error":"","appInactive":false}} | sync_local_socket_connection.py: __send(), line 161
2023-07-20 10:59:27,554 [Thread-1 (__connecti] [DEBUG   ] Sent: 332 | sync_local_socket_connection.py: __send_msg(), line 169
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'route'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'pwa'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'web'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'platform'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'width'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'height'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowWidth'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowHeight'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowTop'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'windowLeft'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,554 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'clientIP'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,555 [Thread-2 (on_session] [DEBUG   ] _process_command: get ['page', 'clientUserAgent'] {} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,555 [Thread-2 (on_session] [INFO    ] Session started:  | app.py: on_session_created(), line 354
2023-07-20 10:59:27,555 [Thread-2 (on_session] [DEBUG   ] _process_command: add [] {'to': 'page', 'at': '0'} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,555 [Thread-2 (on_session] [DEBUG   ] _process_command: add [] {'to': 'page', 'at': '1'} | local_connection.py: _process_command(), line 77
2023-07-20 10:59:27,555 [Thread-2 (on_session] [DEBUG   ] __send: {"action":"pageControlsBatch","payload":[{"action":"addPageControls","payload":{"controls":[{"t":"view","i":"_1","p":"page","c":["_2"],"at":"0"},{"t":"text","i":"_2","p":"_1","c":[],"value":"Hello  4567"}],"trimIDs":[]}},{"action":"addPageControls","payload":{"controls":[{"t":"offstage","i":"_3","p":"page","c":["_4"],"at":"1"},{"t":"clipboard","i":"_4","p":"_3","c":[]}],"trimIDs":[]}}]} | sync_local_socket_connection.py: __send(), line 161
2023-07-20 10:59:27,555 [Thread-2 (on_session] [DEBUG   ] Sent: 393 | sync_local_socket_connection.py: __send_msg(), line 169

Once again updating main.py with touch main.py. Hot reload fails:

2023-07-20 10:59:40,956 [MainThread          ] [DEBUG   ] Gracefully terminating Flet app... | app.py: exit_gracefully(), line 157
2023-07-20 10:59:40,956 [MainThread          ] [DEBUG   ] Closing connection... | sync_local_socket_connection.py: close(), line 133
2023-07-20 10:59:41,190 [MainThread          ] [INFO    ] Assets path configured: /home/roald/KMM/CODE_TESTING/flet-run-test/assets | app.py: __get_assets_dir_path(), line 607
2023-07-20 10:59:41,191 [MainThread          ] [INFO    ] Starting up UDS server on /tmp/awhSlXMOxJ | sync_local_socket_connection.py: connect(), line 62
2023-07-20 10:59:41,191 [Thread-1 (__connecti] [DEBUG   ] Waiting for a client connection | sync_local_socket_connection.py: __connection_loop(), line 144
2023-07-20 10:59:41,191 [MainThread          ] [INFO    ] Connected to Flet app and handling user sessions... | app.py: __app_sync(), line 163

Lastly terminating flet run with CTRL+C

2023-07-20 11:00:10,880 [MainThread          ] [DEBUG   ] Gracefully terminating Flet app... | app.py: exit_gracefully(), line 157
2023-07-20 11:00:10,880 [MainThread          ] [DEBUG   ] Closing connection... | sync_local_socket_connection.py: close(), line 133

Evaluation

I cannot see anything specific failing other than that Thread-1 starts Waiting for a client connection | sync_local_socket_connection.py: __connection_loop(), line 144, but does never seem to get one when hot reload fails.

@FeodorFitsner - are you able to get something useful from this?

@naoufalzerai
Copy link

naoufalzerai commented Aug 31, 2023

Hello,
Thanks for looking into this, me too I have experienced the same problem
I dont know if it will helps but I have this error , the app works fine until I change the code :

(flet:14342): Gdk-CRITICAL **: 11:28:51.768: gdk_window_get_state: assertion 'GDK_IS_WINDOW (window)' failed
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Stack Overflow
#0      _StringBase._interpolate (dart:core-patch/string_patch.dart)
#1      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#2      FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#3      main.<anonymous closure> (package:flet_client/main.dart)
#4      FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#5      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#6      FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#7      main.<anonymous closure> (package:flet_client/main.dart)
#8      FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#9      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#10     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#11     main.<anonymous closure> (package:flet_client/main.dart)
#12     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#13     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#14     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#15     main.<anonymous closure> (package:flet_client/main.dart)
#16     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#17     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#18     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#19     main.<anonymous closure> (package:flet_client/main.dart)
#20     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#21     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#22     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#23     main.<anonymous closure> (package:flet_client/main.dart)
#24     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#25     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#26     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#27     main.<anonymous closure> (package:flet_client/main.dart)
#28     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#29     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#30     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#31     main.<anonymous closure> (package:flet_client/main.dart)
#32     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#33     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#34     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#35     main.<anonymous closure> (package:flet_client/main.dart)
#36     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#37     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#38     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#39     main.<anonymous closure> (package:flet_client/main.dart)
#40     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#41     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#42     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#43     main.<anonymous closure> (package:flet_client/main.dart)
...
...
#100582 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100583 main.<anonymous closure> (package:flet_client/main.dart)
#100584 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100585 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100586 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100587 main.<anonymous closure> (package:flet_client/main.dart)
#100588 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100589 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100590 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100591 main.<anonymous closure> (package:flet_client/main.dart)
#100592 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100593 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100594 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100595 main.<anonymous closure> (package:flet_client/main.dart)
#100596 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100597 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100598 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100599 main.<anonymous closure> (package:flet_client/main.dart)
#100600 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100601 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100602 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100603 main.<anonymous closure> (package:flet_client/main.dart)
#100604 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100605 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100606 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100607 main.<anonymous closure> (package:flet_client/main.dart)
#100608 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100609 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100610 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100611 main.<anonymous closure> (package:flet_client/main.dart)
#100612 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100613 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100614 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100615 main.<anonymous closure> (package:flet_client/main.dart)
#100616 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100617 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100618 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100619 main.<anonymous closure> (package:flet_client/main.dart)
#100620 FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#100621 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#100622 FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#100623 main.<anonymous closure> (package:flet_client/main.dart)
#100624 PlatformDispatcher._dispatchError (dart:ui/platform_dispatcher.dart)
#100625 _onError (dart:ui/hooks.dart)

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Stack Overflow
#0      _StringBase._interpolate (dart:core-patch/string_patch.dart)
#1      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#2      FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#3      main.<anonymous closure> (package:flet_client/main.dart)
#4      FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#5      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#6      FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#7      main.<anonymous closure> (package:flet_client/main.dart)
#8      FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#9      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#10     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#11     main.<anonymous closure> (package:flet_client/main.dart)
#12     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#13     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#14     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#15     main.<anonymous closure> (package:flet_client/main.dart)
#16     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#17     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#18     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#19     main.<anonymous closure> (package:flet_client/main.dart)
#20     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#21     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#22     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#23     main.<anonymous closure> (package:flet_client/main.dart)
#24     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#25     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#26     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#27     main.<anonymous closure> (package:flet_client/main.dart)
#28     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#29     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#30     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#31     main.<anonymous closure> (package:flet_client/main.dart)
#32     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#33     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#34     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#35     main.<anonymous closure> (package:flet_client/main.dart)
#36     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#37     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#38     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#39     main.<anonymous closure> (package:flet_client/main.dart)
#40     FlutterError.reportError (package:flutter/src/foundation/assertions.dart)
#41     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart)
#42     FletAppErrorsHandler.onError (package:flet/src/flet_app_errors_handler.dart)
#43     main.<anonymous closure> (package:flet_client/main.dart)

Config :
Lubuntu 23.04 x86_64Lubuntu 23.04 x86_64
Python 3.11.4

@sausix
Copy link

sausix commented Nov 23, 2023

Assuming it's the same bug then it's NOT related to hot reload.
I've spent a few hours debugging flet and also watchdog and it boils down to the handler function restart_program in cli/commands/run.py:

self.p.send_signal(signal.SIGTERM)

The SIGTERM does not work as expected and flutter's event loop gets broken or stuck somehow. Didn't dig deeper. Sorry.

And as I said it's not a hot reload problem because even without -d option you can trigger the bug by:

kill -s SIGTERM pid (as pid lookup the process id of python -u [your-app.py]

Can you confirm that @rkleivel ? Thank you.

Seem to affect UNIX systems: Linux and MacOS and it's probably a flutter bug.

Also a lot of bugreports seem to be a duplicate of this:
#1879
#1945
#1975
#2072
#2111
What about pinning this issue to reduce more bugreports?

@rlhk
Copy link

rlhk commented Dec 1, 2023

Hot reload never worked for me on macOS native.
For this reason I have to always use web mode or iOS Flet viewer app for dev.
Plus Safari client has serious memory leak for my OpenCV based video player component. So Chrome client becomes my dev default.

NOTE: no memory leak observed on macOS native.

@rkleivel
Copy link
Author

rkleivel commented Dec 1, 2023

And as I said it's not a hot reload problem because even without -d option you can trigger the bug by:

kill -s SIGTERM pid (as pid lookup the process id of python -u [your-app.py]

Can you confirm that @rkleivel ? Thank you.

@sausix - I can confirm that behaviour here also. But I do not have the knowledge needed to verify the conclusion you draw from it.

@sausix
Copy link

sausix commented Dec 4, 2023

@rkleivel

But I do not have the knowledge needed to verify the conclusion you draw from it.

It's a problem not directly related to hot reload. And probably a bug in flutter. That's an important step and you helped to confirm that.

@ndonkoHenri
Copy link
Collaborator

Try this and let me know please:
https://ndonkohenri.medium.com/troubleshooting-hot-reload-in-the-latest-flet-versions-python-ae4eb3a6b0c6

@Klu1d
Copy link

Klu1d commented Dec 12, 2023

Try this and let me know please: https://ndonkohenri.medium.com/troubleshooting-hot-reload-in-the-latest-flet-versions-python-ae4eb3a6b0c6

I also have this issue with hot reloading in ubuntu 23.10.

I followed the instructions in your article and my problem still remains

@rlhk
Copy link

rlhk commented Dec 13, 2023

Try this and let me know please: https://ndonkohenri.medium.com/troubleshooting-hot-reload-in-the-latest-flet-versions-python-ae4eb3a6b0c6

Works flawless for me on macOS. Thanks for the solution!

@rkleivel
Copy link
Author

Try this and let me know please: https://ndonkohenri.medium.com/troubleshooting-hot-reload-in-the-latest-flet-versions-python-ae4eb3a6b0c6

Thanks, @ndonkoHenri - I can confirm that this workaround works for me. Targeting the app with ft.app(target=main, view=ft.AppView.WEB_BROWSER) inside the script, and running with flet run -p 1234 counter.py solves the reload problem. Here is a video demo:

Screencast.from.2023-12-13.09-53-16.mp4

Another observation that could be worth mentioning:
The above demo is made on my HP laptop with i7 processor and an Nvidia graphics card.
I tested this also on another PC with AMD Ryzen 9 on an ASUS motherbord with builtin graphics capabilities (no GPU), and was not able to reproduce the hot reload issue at all. ft.app(target=main) together with flet run counter.py worked flawlessly there. I guess this indicates some platform relation(?)

@ndonkoHenri
Copy link
Collaborator

I guess this indicates some platform relation(?)

Definitely, @rkleivel !

@Tatayoyoh
Copy link

Hi there !

I had the same problem (Linux Mint 21.1 Vera, Python 3.10.12, AMD Ryzen 7).

And it was resolved by adding a port flet run chat.py -p 6000

Peek 17-12-2023 18-01

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants