Я пытаюсь получить путь к изображению с пользовательского устройства через средство выбора файлов, сохранить информацию о пути в файле client.storage для последующего использования и использовать это изображение в качестве ElevatedButton. Хотя это работает в Windows, на Android это не так.
Я собрал APK с помощью следующей команды: flet build apk --include-packages flet_permission_handler -vv
Пример кода:
import flet as ft
import os
def get_folder(page, base_path):
store = {}
image_extensions = ['.jpg', '.jpeg', '.png']
for item in os.listdir(base_path):
item_path = os.path.join(base_path, item)
if os.path.isfile(item_path) and any(item.lower().endswith(ext) for ext in image_extensions):
tmp = page.client_storage.get("lib")
page.client_storage.set("lib", page.client_storage.get("lib") + [item_path])
print(page.client_storage.get("lib"))
page.update()
break
def build_home(page):
imagesPath = page.client_storage.get("lib")
images = ft.ResponsiveRow()
for item in imagesPath:
images.controls.append(
ft.ElevatedButton(
col={"sm": 12, "md": 4, "xl": 2},
content=ft.Image(
src=item,
border_radius=ft.border_radius.all(20)
),
style=ft.ButtonStyle(
shape={ft.MaterialState.DEFAULT: ft.RoundedRectangleBorder(radius=20)},
padding={ft.MaterialState.HOVERED: 0}
)
)
)
page.update()
return images
def main(page: ft.Page):
if page.client_storage.contains_key("lib"):
print("storage exists")
print(page.client_storage.get("lib"))
else:
page.client_storage.set("lib", [])
# PermissionHandler ------------------------------------------------
ph = ft.PermissionHandler()
page.overlay.append(ph)
def request_permission_media(e=None):
try:
result = ph.request_permission(ft.PermissionType.MEDIA_LIBRARY)
except Exception as ex:
print(f"Media Library Permission Error: {ex}")
def request_permission_external_storage(e=None):
try:
result = ph.request_permission(ft.PermissionType.STORAGE)
except Exception as ex:
print(f"Storage Permission Error: {ex}")
# DATA path--------------------------------------------
page.storage = list(page.client_storage.get_keys("lib"))
## Home page--------------------------------------------
if len(page.storage) > 0:
home = build_home(page)
home.visible = True
else:
home = ft.ResponsiveRow()
### Folder picker --------------------------------------
def pick_files_result(result: ft.FilePickerResultEvent):
if result.path:
get_folder(page, result.path)
page.resultPath = result.path
page.storage = page.client_storage.get_keys("key-prefix.")
page.controls[0] = build_home(page)
page.update()
page.pick_files_dialog = ft.FilePicker(on_result=pick_files_result)
page.overlay.append(page.pick_files_dialog)
# Build pages--------------------------------------------
#page.add(page.home)#, page.chapters)
page.floating_action_button = ft.FloatingActionButton(
icon=ft.icons.ADD,
tooltip="Add a story",
shape=ft.CircleBorder(),
width=100,
mini=True,
on_click = lambda _: page.pick_files_dialog.get_directory_path()
)
page.add(home) # page.controls[0]
page.update()
ft.app(target=main, upload_dir="assets")
Если я запущу это в Windows и выберу папку, в которой присутствует изображение ['.jpg', '.jpeg', '.png'], я получу ElevatedButton, созданный с помощью изображение в папке. Однако на Android ничего не происходит.
Я пытаюсь получить путь к изображению с пользовательского устройства через средство выбора файлов, сохранить информацию о пути в файле client.storage для последующего использования и использовать это изображение в качестве ElevatedButton. Хотя это работает в Windows, на Android это не так. Я собрал APK с помощью следующей команды: flet build apk --include-packages flet_permission_handler -vv Пример кода: [code]import flet as ft import os
def get_folder(page, base_path): store = {} image_extensions = ['.jpg', '.jpeg', '.png'] for item in os.listdir(base_path): item_path = os.path.join(base_path, item) if os.path.isfile(item_path) and any(item.lower().endswith(ext) for ext in image_extensions): tmp = page.client_storage.get("lib") page.client_storage.set("lib", page.client_storage.get("lib") + [item_path]) print(page.client_storage.get("lib")) page.update() break
def request_permission_media(e=None): try: result = ph.request_permission(ft.PermissionType.MEDIA_LIBRARY) except Exception as ex: print(f"Media Library Permission Error: {ex}")
def request_permission_external_storage(e=None): try: result = ph.request_permission(ft.PermissionType.STORAGE) except Exception as ex: print(f"Storage Permission Error: {ex}")
# DATA path-------------------------------------------- page.storage = list(page.client_storage.get_keys("lib"))
## Home page-------------------------------------------- if len(page.storage) > 0: home = build_home(page) home.visible = True else: home = ft.ResponsiveRow()
ft.app(target=main, upload_dir="assets") [/code] Если я запущу это в Windows и выберу папку, в которой присутствует изображение ['.jpg', '.jpeg', '.png'], я получу ElevatedButton, созданный с помощью изображение в папке. Однако на Android ничего не происходит.