Tradycyjny sposób implementacji dark mode w aplikacji Bubble za pomocą wyrażeń warunkowych jest prosty, ale posiada wiele wad. Z artykułu dowiesz się jak bez korzystania z pluginów wdrożyć elastyczny i skalowalny mechanizm zmiany kolorystyki layoutu przez użytkownika aplikacji.
W internecie możesz znaleźć wiele poradników na temat “jak dodać dark mode do aplikacji Bubble”. Większość z nich opiera się na prostej koncepcji dodawania wyrażeń warunkowych (conditionals) do każdego elementu z osobna.
Takie rozwiązanie jest proste do wdrożenia, ale posiada kilka wad, które ujawniają się dopiero w trakcie prac nad aplikacją:
Wyrażenia warunkowe zmieniające kolor elementu w zależności od preferencji użytkownika musisz dodać do każdego pojedynczego obiektu w aplikacji. Przy złożonych projektach oznacza to dodatkowe dziesiątki godzin spędzonych wyłącznie na dodawaniu kolorów do layoutu.
Co prawda część z tych wyrażeń warunkowych można zaimplementować w stylach globalnych, ale edytor pozwala na użycie tylko najprostszych warunków. Można więc sprawdzić, czy pole ‘darkMode’ ma wartość ‘yes’, ale warunkowanie na wartości ‘Display’ z ‘Option Set’ jest już niemożliwe.
Wyrażenia warunkowe na elementach wyzwalane są dosyć późno podczas ładowania kodu aplikacji. Przy wielu operacjach, które wykonywane są wcześniej (np. podczas eventu Page is loaded) wyraźnie widoczny będzie moment zmiany koloru elementu z domyślnego na ten określony w wyrażeniu warunkowym.
Jeśli korzystasz z rozbudowanych design systemów (np. Material) to limit 32 zmiennych kolorystycznych okaże się zbyt mały do obsłużenia podstawowej palety kolorystycznej, nie wspominając już o dodatkowym dark mode. W rezultacie w wyrażeniach warunkowych będziesz korzystać z literałów, czyli “na sztywno” wprowadzonych wartości kolorystycznych. Takie podejście jest podane na błędy i literówki, mało skalowalne i niepotrzebnie zwiększające objętość kodu aplikacji.
Grupą docelową jednej z budowanych przeze mnie aplikacji są zawodowi developerzy. Projektując jej wygląd chciałem, żeby wrażenia użytkownika były jak najbardziej zbliżone do wzorców UX/UI znanych z najpopularniejszych narzędzi programistycznych. Jedną z funkcji miała być możliwość wyboru palety kolorystycznej interfejsu przez użytkownika.
Jeśli skorzystałbym z opisanego wyżej tradycyjnego podejścia to dodanie nowego schematu barw do aplikacji wymagałoby ode mnie dodania nowych wyrażeń warunkowych do każdego obiektu w aplikacji z osobna.
Żeby nie marnować niepotrzebnie czasu zastosowałem prostą sztuczkę – dynamicznie zmieniam wartości zmiennych kolorystycznych (CSS custom properties / color variables) w zależności od preferencji użytkownika.
Oto kilka zalet tej metody nad tradycyjnym podejściem:
Wdrożenie dark mode w aplikacjach Bubble według wspomnianego wcześniej sposobu składa się z kilku etapów.
Krok 1: stwórz zestaw zmiennych kolorystycznych i nadaj im domyślne wartości
W zakładce Styles > Style variables stwórz zestaw zmiennych i przypisz im kolory z Twojej podstawowej palety. W zasadzie, na tym etapie możesz wybrać dowolne barwy (ponieważ później i tak będą nadpisywane), ale domyślne kolory będą widoczne w edytorze, więc dla własnej wygody warto nadać im wartości odpowiadające rzeczywistości.
Krok 2: stwórz Option Set, w którym będziesz przechowywać wartości kolorów dla każdej palety
W panelu Data > Option Sets utwórz nowy zestaw opcji – nazwij go colorScheme, colorPalette lub podobnie. Każda opcja w zestawie powinna składać się z listy atrybutów o typie Text i nazwach odpowiadających wprowadzonym wcześniej zmiennym. Zbieżne nazwy nie są wymogiem, ale znacząco ułatwiają pracę. Wartościami poszczególnych atrybutów są kody kolorów odpowiednie dla danej palety.
Przykład z mojej aplikacji:
Krok 3: zbuduj mechanizm wyboru schematu kolorystycznego przez użytkownika
W pierwszej kolejności w Data Type ‘User’ stwórz pole, w którym będziesz przechowywać wybraną przez użytkownika paletę kolorystyczną. W moim przypadku jest to pole o nazwie ‘colorPalette’ o typie ‘OS_colorPalette’ i wartości domyślnej ustawionej na ‘Default dark’.
Następnie w swojej aplikacji zbuduj mechanizm wyboru i zapisywania wybranej palety przez użytkownika. Na wcześniejszym wideo widoczne było moje rozwiązanie – prosty dropdown, który jako ‘Data source’ pobierał listę wszystkich opcji z ‘OS_colorPalette’.
Krok 4: pobierz systemowe nazwy używanych zmiennych kolorystycznych
Uruchom stronę główną swojej aplikacji (index) w przeglądarce, a następnie otwórz rozszerzenie DevTools. W panelu Elements podświetl nadrzędny tag <html>. W panelu Styles znajdź listę wszystkich zmiennych kolorystycznych (prawdopodobnie będzie zapisana w klasie b-root), a następnie skopiuj ją i wklej do dowolnego edytora tekstu.
Skopiowaną listę sformatuj w taki sposób, aby była prawidłowym tagiem ‘style’:
Poniżej sformatowana lista zmiennych kolorystycznych z mojej aplikacji:
Krok 5: Dodaj dynamiczny arkusz stylów do aplikacji Bubble
Na każdej stronie swojej aplikacji dodaj nowy element HTML. Obiekt powinien być umiejscowiony jako pierwszy na stronie, dzięki czemu podmiana kolorów nastąpi przed wyświetleniem pozostałych elementów.
W swojej aplikacji rozwiązałem to za pomocą elementu reużywalnego (reusable element), który umiejscowiony jest jako pierwszy na liście elementów (elements tree) każdej podstrony. Wewnątrz niego znajduje się element HTML o rozmiarze 1×1 px.
W pole z treścią tego elementu wklej opracowaną w poprzednim punkcie listę. Każdą deklarację uzupełnij wyrażeniem dynamicznym, odwołującym się do koloru zapisanego w Option Set pod parametrem odpowiadającym danej zmiennej.
Fragment z mojej aplikacji:
W utworzonym właśnie elemencie HTML następuje nadpisywanie domyślnych wartości zmiennych kolorystycznych na te wartości, które są przechowywane w bazie danych zalogowanego użytkownika. Gdy tylko element zostanie wczytany w całości, wykonywane jest zapytanie do bazy danych, które zwraca wybraną przez użytkownika paletę kolorów oraz wszystkie jej wartości. Kolejne elementy na stronie renderowane są już przy użyciu nadpisanych kolorów.
Na koniec – w edytowanym elemencie warto zaznaczyć checkboxa ‘Wait to render this element until it is visible’ – powinno to zapobiec nadpisaniu zmiennych pustymi wartościami, jeśli odwołanie do bazy danych będzie trwało dłużej niż zwykle.
Istnieje prostsza metoda implementacji powyższej metody, w której użytkownik nie ma możliwości wyboru palety kolorystycznej, ale ta ustawiana jest w zależności od ustawień przeglądarki.
Procedura jest podobna do opisanej wyżej:
Przykładowy kod:
Na koniec powtarzasz krok piąty, czyli wklejasz gotowy kod CSS do elementu HTML renderowanego na każdej podstronie aplikacji.
W mojej opinii metoda nadpisywania wartości zmiennych kolorystycznych jest dużo lepszym sposobem na wdrożenie dark mode w aplikacji Bubble niż tradycyjne podejście opierające się na wyrażeniach warunkowych. Umożliwia ona dodanie wygodnej z punktu widzenia użytkownika funkcji zmiany kolorystyki aplikacji stosunkowo niskim nakładem pracy programistycznej – niezależnie od tego jak bardzo złożony jest projekt, nad którym pracujemy.
Ile przepłacasz za każdy Saas? Sprawdź realne koszty rozwiązań Software as a Service i poznaj najlepsze alternatywy dla Twojej firmy. Zredukuj koszty teraz!
Poznaj prawdę o no code low code i sprawdź, czy to technologia dla Ciebie i Twoich potrzeb. Zobacz jakie LCNC ma wady i zalety w biznesowej praktyce.
Czy technologia no-code low-code może wspierać zarządzanie? Jakie korzyści niesie dla Project Managerów? Wiele, sprawdź!
Szukasz wartościowych artykułów na temat technologii no-code i low-code? Przeczytaj najnowsze artykuły o low code i no code na naszym blogu! Zobacz, jak tworzyć oprogramowanie, stawiać strony internetowe czy budować aplikacje mobilne bez kodowania.
Sprawdź eksperckie artykuły, w których poznasz najlepsze platformy low code i najlepsze platformy no code: Bubble, Webflow, Flutter Flow, Xano oraz wiele innych. Naucz się podstaw lub poznaj zaawansowane metody i zostań no-code developerem.
Nasz No Code Low Code Blog wprowadzi Cię do świata innowacyjnych technologii, w którym tworzenie oprogramowania jest proste i przyjemne. Jeśli chcesz stworzyć aplikację, zbudować MVP lub postawić stronę z no-code / low-code, to trafiłeś idealnie! Zyskaj wiedzę techniczną i biznesową z havenocode już teraz!