Pull to refresh

Comments 30

Киви — отличная штука для быстрых стартов. Но вот стоит ли писать на нём что-то серьёзное? Не выкинет ли Apple приложение для iOS, так как оно написано не наитивно?
а flutter сильно отличается разве от Kivy в этом плане
Хорошее сравнение.Flutter по сравнению с приведенными аргументами при отображении(создании) виджетов выглядит действительно уныло.Это правда.Но как обстоят дела у Киви с вызовом нативных функцие, как дела с управлением состоянием приложения, как например работать с БД.Что есть? Приведите свои аргументы «за».

Что вы подразумеваете под "состоянием приложения"?


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;
    }
}
Под управлением состоянием приложения я подразумеваю применение «модных» патернов типа «BloC,Flux,Redux etc...».Это повсюду применяется для Flutter приложений.Как тут дела у Киви? В любом случае спасибо за обзор, напишите еще.

В KivyMD для этого существует виджет UserAnimationCard:


image


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()
SliverAppBar — даёт больше вариантов применения (Не могу найти документацию по MDUserAnimationCard)

Как таковой, документации у нас, к сожалению, нет. По двум причинам. Во-первых, на это нет времени, потому что два человека не могут успеть всё. А во-вторых, обширнейшая документация есть у Kivy. А KivyMD == Kivy. Поэтому если вы знакомы с документацией Kivy, вам будет достаточно посмотреть на примеры из Wiki KivyMD, чтобы начать с ним работать. А вообще, да, документацию мы работаем.

Скачал play.google.com/store/apps/details?id=org.kivymd.kivymd
Клавиатура перекрывает текстовые поля
Текст вылазит за пределы диалога
Одинаковая анимация между экранами, которая не характерна для android — тоже нечто

А вы на год смотрели? На версию KivyMD смотрели? Пакет собран из репозитория на GitLab, который уже четыре года как не поддерживается! Об этом я писал в этой статье Нашей исправленной версии в сторах нет! И потом… Если клавиатура перекрывает текстовое поле, то это не вина библиотеки, а рукожопого программиста, который забыл указать Window.softinput_mode = "below_target". Это касается и анимации, которая устанавливается в ScreenManager и текста, которому не указали shorten!


image


image

Что на счёт навигации между экранами и характерного для iOS жеста назад?

Вообще, у каждого виджета в 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… Не понятно зачем?..

В приложении есть стек навигации и Android пользователь может перемещаться назад в нём нажимая кнопку назад. В iOS кнопки назад нету, у них её заменяет жест от левого края экрана.

Вот переключение слайда свайпом. С таким успехом я просто назначаю в менеджере экранов имя экрана, которое желаю активировать. Это довольно тривиальная задача.


image

Окееей.
Что на счёт hero анимаций между экранами?

У стандартного ScreenManager есть стандартные Transitions, которые можно расширять собственными шейдерами. Но вы имеете в виду нечто иное. Мы буквально в прошлое воскресение обсуждали создание подобного менеджера:


image


Более того этот вопрос уже неделю закреплен в нашем TODO листе в репозитории KivyMD.

Это тупиковая ветвь, в аппсторе с такими приложениями делать абсолютно нечего.

с такими приложениями делать абсолютно нечего

С какими "такими"?

UFO just landed and posted this here
У вас в статье есть следующее изображение с кодом
image
И там есть нечто подобное
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 , несмотря на то что на картинках в примерах есть случаи с двумя кнопками, на практики в коде я ни в одном из этих примеров двух кнопок не нашёл.
Sign up to leave a comment.

Articles