Comments 30
Что вы подразумеваете под "состоянием приложения"?
Flutter по сравнению с приведенными аргументами при отображении(создании) виджетов выглядит действительно уныло
Не только выглядит. Вчера обновил официальное демонстрационное приложение на Flutter… Половина примеров UI там безбожно тормозит.
Как работать с БД?
Точно так же, как и в Python на десктопе.
Как обстоят дела у Киви с вызовом нативных функций?
Нормально дела обстоят. Происходит это следующим образом с помощью библиотеки PyJnius для Андроид и PuObjus для iOS:
def get_imei_android():
from jnius import autoclass
Service = autoclass('org.renpy.android.PythonActivity').mActivity
Context = autoclass('android.content.Context')
TelephonyManager = Service.getSystemService(Context.TELEPHONY_SERVICE)
return str(TelephonyManager.getDeviceId())
Для примера — реализация нативного получения IMEI устройства на Java:
import android.content.Context;
import android.telephony.TelephonyManager;
public class GetImeiAndroid {
public String getImeiAndroid()
{
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String IMEINumber = tm.getDeviceId();
return IMEINumber;
}
}
В KivyMD для этого существует виджет UserAnimationCard:
class MainApp(MDApp):
def build(self):
user_animation_card = MDUserAnimationCard(
user_name="User Name",
path_to_avatar="path_to_avatar",
)
user_animation_card.box_content.add_widget(ContentClass())
user_animation_card.open()
if __name__ == "__main__":
MainApp().run()
У нас пока не хватает времени реализовать все возможности, которые хотелось бы — KivyMD wiki
Как таковой, документации у нас, к сожалению, нет. По двум причинам. Во-первых, на это нет времени, потому что два человека не могут успеть всё. А во-вторых, обширнейшая документация есть у Kivy. А KivyMD == Kivy. Поэтому если вы знакомы с документацией Kivy, вам будет достаточно посмотреть на примеры из Wiki KivyMD, чтобы начать с ним работать. А вообще, да, документацию мы работаем.
Клавиатура перекрывает текстовые поля
Текст вылазит за пределы диалога
Одинаковая анимация между экранами, которая не характерна для android — тоже нечто
А вы на год смотрели? На версию KivyMD смотрели? Пакет собран из репозитория на GitLab, который уже четыре года как не поддерживается! Об этом я писал в этой статье Нашей исправленной версии в сторах нет! И потом… Если клавиатура перекрывает текстовое поле, то это не вина библиотеки, а рукожопого программиста, который забыл указать Window.softinput_mode = "below_target". Это касается и анимации, которая устанавливается в ScreenManager и текста, которому не указали shorten!
Вообще, у каждого виджета в Kivy есть методы с помощью которого вы можете отловить любые события, происходящие на экране. Вот небольшая часть списка доступных событий:
['double_tap_time', 'grab_state', 'is_double_tap', 'is_mouse_scrolling', 'is_touch', 'is_triple_tap', 'move', 'push', 'push_attrs', 'push_attrs_stack', 'scale_for_screen', 'time_end', 'time_start', 'time_update', 'triple_tap_time', 'ungrab', 'update_time_end']
Поэтому не составляет труда поймать ивент свайпа и переключить экран. Но так чтобы конкретно это было реализовано для iOS… Не понятно зачем?..
Вот переключение слайда свайпом. С таким успехом я просто назначаю в менеджере экранов имя экрана, которое желаю активировать. Это довольно тривиальная задача.
Есть же ScreenManager…
Что на счёт hero анимаций между экранами?
У стандартного ScreenManager есть стандартные Transitions, которые можно расширять собственными шейдерами. Но вы имеете в виду нечто иное. Мы буквально в прошлое воскресение обсуждали создание подобного менеджера:
Более того этот вопрос уже неделю закреплен в нашем TODO листе в репозитории KivyMD.
Это тупиковая ветвь, в аппсторе с такими приложениями делать абсолютно нечего.
![image](https://habrastorage.org/webt/f2/v4/fk/f2v4fkjr4koxfmrx-q47ijmqv10.png)
И там есть нечто подобное
MDToolbar:
size_hint_y: .08
title: "Language Lesson"
md_bg_color: app.theme_cls.primary_color
elevation: 10
left_action_items: [['arrow-left', lambda x: x]]
right_action_items: [['menu', lambda x: x]]
pos_hint: {'top': 1}
И если вставлять сразу left_action_items и right_action_items, то появляется ошибка
weakly-referenced object no longer exists.
В документации по kivyMD , несмотря на то что на картинках в примерах есть случаи с двумя кнопками, на практики в коде я ни в одном из этих примеров двух кнопок не нашёл.
Разработка мобильных приложений на Python. Библиотека KivyMD