Я создаю приложение с помощью flet build apk -vv
Немного о приложении:
- Я сделал приложение для себя и выдуманного языка моих друзей.
- Некоторые части кода написаны на русском языке.
- Он импортирует только запросы и сам флетирует.
- Он имеет запросы GET и PUT.
- Он имеет несколько элементов пользовательского интерфейса. (Поля ввода, кнопки, метки)
- python: 3.12
- flet: 0.28.3
- flutter: 3.29.2
Код: Выделить всё
main.py:
import flet as ft
import process_data as pd
import requests
URL = "https://json.extendsclass.com/bin/
"
def get_data() -> dict | str:
res_get = requests.get(URL)
if res_get.status_code == 200:
return res_get.json()
else:
return res_get.text
def append(ru, wtml):
"""
:param ru: - in russian
:param wtml: - in watermelonian
"""
new_data = get_data()
new_data[ru] = wtml
res_update = requests.put(URL, json=new_data, headers={"Security-key": ""})
if res_update.status_code == 200:
return res_update.json()
else:
return res_update.text
def change(ru, wtml):
append(ru, wtml)
translations = get_data()
VALID_PUNCTUATION = ". , ! ? ; : @ # $ % ^ & / * - + ~".split(" ")
def main(page: ft.Page):
def translate(e):
to_translate = input_field.value.lower()
to_translate = ''.join(char for char in to_translate if char not in VALID_PUNCTUATION)
to_translate = to_translate.split(" ")
result = ""
for word in to_translate:
if word in translations:
result += translations[word]
else:
if pd.check_word_already_good(word):
result += word
else:
result += "ар"+word+"уз"
result += " "
result = pd.copy_capitalization(input_field.value, result)
result = pd.copy_punctuation(input_field.value, result)
output_field.value = result
page.update()
input_field = ft.TextField(label="Русский", hint_text="Введите текст сюда")
output_field = ft.TextField(label="Арбузный", read_only=True, value="Жмакни на кнопку")
submit_button = ft.Button(text="Перевести", on_click=translate)
page.add(ft.Container(
content=ft.Column(
controls=(input_field, output_field, submit_button)
), margin=ft.margin.only(10, 110, 10, 100)))
def add_word(e):
append(new_word_field.value.lower(), new_word_translation_field.value.lower())
translations[new_word_field.value.lower()] = new_word_translation_field.value.lower()
new_word_text.value = f"Добавлено слово \"{new_word_field.value}\" -> \"{new_word_translation_field.value}\""
page.update()
new_word_field = ft.TextField(label="Добавить слово (Русский)", hint_text="Введите текст сюда")
new_word_translation_field = ft.TextField(label="Перевод (Арбузный)", hint_text="Введите текст сюда")
submit_new_word_button = ft.Button(text="Добавить", on_click=add_word)
new_word_text = ft.Text(value="")
page.add(ft.Container(
content=ft.Column(
controls=(new_word_field, new_word_translation_field, submit_new_word_button, new_word_text)
), margin=ft.margin.only(10, 10, 10, 110)))
page.update()
ft.app(main, port=5000)
Код: Выделить всё
process_data.py:
def apply_spaces_patterned(pattern, text):
result = []
text_index = 0
for char in pattern:
if char == " ":
result.append(" ")
else:
if text_index < len(text):
result.append(text[text_index])
text_index += 1
if text_index < len(text):
result.append(text[text_index:])
return "".join(result)
def copy_capitalization(input_str: str, output_str: str):
words = input_str.split(" ")
output_words = output_str.split(" ")
for i, word in enumerate(words):
if word[0].capitalize() == word[0]:
# is capitalized
if word.upper() == word:
# is caps
try:
output_words[i] = output_words[i].upper()
except IndexError:
print("out of range, but it's fine bro")
else:
try:
output_words[i] = output_words[i][0].upper() + output_words[i][1:]
except IndexError:
print("out of range, but it's fine bro")
result = "".join(output_words)
return apply_spaces_patterned(output_str, result)
def copy_punctuation(pattern: str, text: str):
VALID_PUNCTUATION = ". , ! ? ; : @ # $ % ^ & / * - + ~".split(" ")
punctuations = []
pattern_words = pattern.split(" ")
text_words = text.split(" ")
for i, word in enumerate(pattern_words):
if word[-1] in VALID_PUNCTUATION:
punctuations.append([word[-1], i])
result = ""
if not punctuations:
return text
for i, word in enumerate(text_words):
added = False
for punc in punctuations:
if punc[1] == i:
added = True
result = result + str(text_words[punc[1]] + punc[0]) + " " # лучше это не трогать
break
if not added:
result = result + word + " "
if result[-1] == " ":
result = result[0:len(result)-1]
return result
def check_word_already_good(word):
allowed_letters = "а р б у з".split(" ")
for letter in word:
if letter not in allowed_letters:
return False
return True
Что я пробовал:
- Помещение точной версии Flet в файл require.txt
- Переустановка flutter
- Перестройка
Подробнее здесь: https://stackoverflow.com/questions/797 ... works-fine