APK с проблемой с хранилищемPython

Программы на Python
Ответить
Anonymous
 APK с проблемой с хранилищем

Сообщение Anonymous »

Я пытаюсь получить путь к изображению с пользовательского устройства через средство выбора файлов, сохранить информацию о пути в файле 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 ничего не происходит.


Подробнее здесь: https://stackoverflow.com/questions/792 ... rage-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»