Początek ostatniego miesiąca konkursu Daj Się Poznać 2017 już za nami. Nieuchronnie zbliżamy się do finału. Mój projekt również co raz większymi krokami zbliża się do fazy MVP.
W jednym z pierwszych postów, określiłem swoje MVP jako jeżdżący robot, którym będę mógł posterować ręcznie ze smartfona. Ostatnim elementem, nie zaczętym do tej pory, była właśnie aplikacja mobilna. Zdecydowałem się na skorzystanie z Xamarin FORMS, bo jest to technologia w którą chciałbym zainwestować trochę czasu, żeby ją lepiej poznać. SBBotMobile jest w zasadzie pierwszą moją aplikacją w Xamarin FORMS, która jest nie-testowa i nie-kursowa, a w której zbieram w całość kilka funkcjonalności.
Poniższy screen przedstawia (w emulatorze Androida) wstępne, bardzo kwadratowe, UI które przygotowałem. Na chwilę obecną traktuję to jako taki place-holder. Zdaję sobie sprawę, że to co przygotowałem nie spełnia nijak standardów dobrego mobilnego UI, a co gorsza nie skaluje się w Landscape. Ponieważ jednak modyfikacja UI w Xaml-u jest niezwykle wygodna i kompletnie nie inwazyjna w pozostałą część kodu, UI zostanie z pewnością przeprojektowane w późniejszym czasie.
Jeżeli chodzi o kwestie implementacyjne to większość kodu napisanego dla wersji WPF spokojnie można było przenieść do Xamarin FORMS. Nie było też żadnego problemu z biblioteką ZeroConf – działa dokładnie tak samo jak w wersji desktop. Pojawiły się natomiast dwa inne problemy:
WebClient, którego ze względu na jego prostotę wykorzystywałem w aplikacji desktopowej nie ma swojego bezpośredniego odpowiednika w Mono i w związku z tym byłem zmuszony skorzystać z HttpClient. Na szczęście jest to niezwykle prosta w obsłudze biblioteka i przeróbka w tej części nie była kłopotem. HttpClient nie jest częścią Xamarin FORMS ale można go doinstalować przez nuget
Drugim problemem okazał się UdpClient, który również nie posiada implementacji możliwej do wykorzystania z PCL. Oczywiście można się pokusić o interfejsową abstrakcję części kodu i implementować samą obsługę połączenia dla każdej z platform osobno. Ja jednak jestem trochę leniwy (ponoć to całkiem dobra cecha u programistów 🙂 ) i znalazłem bibliotekę, która zrobiła to za mnie.
Aplikację póki co testowałem jedynie z emulatorem Androida. Poniżej gif prezentujący aplikację mobilną w akcji, zrobiony dokladnie na wzór gif-a którego przygotowałem pokazując aplikację desktopową.
Aktualny kod oczywiście na github.
- dokończenie aplikacji mobilnej
- drobne przeróbki konstrukcyjne robota
- rozwiązanie problemu opóźnienia reakcji na ramkę UDP po stronie ESP8266
- doszlifowanie trybu automatycznego robota.