- Toolkit GUI reactive lintas platform yang sederhana
- Sederhana: dapat ditambahkan ke proyek dengan mudah dan langsung digunakan untuk membangun UI. Tidak memerlukan alat tambahan atau tahap pembuatan kode. Tulis kode Go dan buat aplikasi GUI native sebagai biner mandiri
- Lintas platform: menggunakan widget native jika memungkinkan, dan saat kompilasi secara otomatis memilih backend yang paling sesuai untuk platform yang sedang digunakan. Saat ini tersedia dua implementasi backend: berbasis FLTK dan berbasis Cocoa
- Reaktif: secara otomatis memperbarui UI saat status aplikasi berubah. Menyediakan fungsi render tanpa efek samping dan menggunakan hook
UseState untuk mengelola status aplikasi
- Dukungan widget yang luas: Spot menyediakan berbagai kontrol UI secara bawaan seperti tombol, label, input teks, slider, dropdown, dan lainnya
Pertanyaan yang Sering Diajukan (FAQ)
Apa yang dimaksud dengan "reaktif"?
- Di Spot, reaktif berarti UI akan diperbarui secara otomatis ketika status aplikasi berubah. Hal ini dilakukan dengan membangun ulang pohon komponen immutable saat status berubah, lalu membandingkannya dengan status sebelumnya untuk menentukan kontrol UI mana yang perlu diperbarui.
Apa yang dimaksud dengan "widget native" yang digunakan Spot?
- Saat ini Spot menggunakan backend Cocoa di macOS, dan backend berbasis FLTK di semua platform lainnya. Secara opsional, FLTK juga dapat digunakan di Mac. Dukungan yang lebih baik untuk Windows direncanakan di masa mendatang.
Apakah saya bisa mengimplementasikan hook sendiri?
- Ya, seperti React, Anda bisa mengimplementasikan hook sendiri. Cukup buat fungsi yang menerima
*spot.RenderContext sebagai argumen pertama, lalu gunakan itu untuk "mengaitkan" diri ke lifecycle Spot.
Bagaimana cara menulis komponen kustom?
- Ada beberapa cara untuk memisahkan UI menjadi komponen di Spot. Cara utamanya adalah membuat struct yang mengimplementasikan interface
spot.Component. Interface ini memiliki satu metode: Render(ctx *spot.RenderContext) spot.Component.
Bisakah saya menggunakan library widget lain selain yang disediakan?
- Ya, bisa. Anda cukup membuat struct yang mengimplementasikan interface
spot.Component dan mengelola widget native.
Bisakah saya menggunakan backend selain Cocoa atau FLTK?
- Untuk saat ini hanya dua backend ini yang didukung. Jika ingin menambahkan backend lain, Anda dapat mengirimkan PR.
Apa perbedaan antara spot/ui dan spot?
spot adalah paket inti yang menyediakan model reaktif dan fungsi rendering. Paket ini tidak bergantung pada backend dan dapat digunakan dengan kumpulan kontrol apa pun yang mengimplementasikan interface spot.Control.
spot/ui menyediakan kumpulan kontrol GUI lintas platform yang sudah dibangun sebelumnya untuk digunakan bersama spot.
Apa perbedaan antara "komponen" dan "kontrol"?
- Di Spot, komponen adalah unit logis dalam aplikasi yang mencakup logika bisnis dan status. Semua komponen tersusun dari komponen lain dan pada akhirnya dirender menjadi satu atau lebih "kontrol".
- Kontrol adalah jenis komponen khusus yang dipasang ke pohon UI dan merepresentasikan elemen visual di layar.
Apa arti istilah "make", "render", "build", "mount", "update" di Spot?
- Make: proses membuat instance komponen baru. Dilakukan dengan mereferensikan instance struct yang mengimplementasikan interface
spot.Component atau memanggil spot.Make dengan fungsi render.
- Render: proses menerapkan status komponen ke blok penyusun lalu mengembalikan instance komponen lain. Dilakukan dengan memanggil metode
Render pada instance komponen.
- Build: proses membuat pohon UI baru dari instance komponen. Ini dilakukan dengan merender komponen secara rekursif untuk menghasilkan pohon kontrol.
- Mount: proses membuat kontrol UI nyata dari pohon kontrol (virtual). Dilakukan dengan memanggil
Mount pada node pohon atau memanggil spot.Mount dengan instance komponen atau fungsi render.
- Update: proses memperbarui pohon kontrol yang (sudah di-mount). Dilakukan dengan memanggil
Update pada node pohon.
Fitur yang saat ini belum didukung oleh Spot
- tata letak otomatis
- banyak jendela
- dialog modal
- jendela yang dapat diubah ukurannya
- menu bar
- widget kustom
- akses widget native
- drag and drop
- internasionalisasi
Daftar kontrol UI yang didukung
- Button: tombol sederhana untuk memulai aksi (Fl_Button, NSButton)
- Checkbox: kontrol untuk memilih salah satu dari dua opsi yang saling eksklusif (Fl_Check_Button, NSButton (NSButtonTypeSwitch))
- ComboBox: menu dropdown dengan input teks (ComboBox, NSComboBox)
- Dial: kontrol status melingkar (Fl_Dial, NSProgressIndicator (with
NSCircular style))
- Dropdown: menu dropdown untuk memilih satu dari beberapa opsi (Fl_Choice, NSComboBox)
- Image: kontrol gambar (Image, NSImageView)
- Label: label teks sederhana yang tidak dapat diedit (Fl_Box, NSTextField)
- ListBox: kontrol yang dapat digulir untuk memilih satu atau beberapa item dari daftar yang diberikan (Fl_Select_Browser/Fl_Multi_Browser, NSTableView)
- ProgressBar: kontrol bilah kemajuan untuk memvisualisasikan progres tugas yang berjalan lama (Fl_Progress, NSProgressIndicator)
- Slider: kontrol input slider horizontal (Fl_Slider, NSSlider)
- Spinner: kontrol input angka dengan tombol naik/turun (Fl_Spinner, NSTextField+NSStepper)
- TextField: kontrol input teks satu baris (Fl_Input, NSTextField)
- TextView/TextEditor: kotak teks serbaguna untuk melihat/mengedit konten teks multi-baris (Text, NSTextView)
- Window: kontrol yang merepresentasikan jendela (tingkat atas) di layar (Fl_Window, NSWindow)
Opini GN⁺
- Spot memudahkan pengembangan aplikasi GUI lintas platform dengan bahasa Go. Secara khusus, Spot mengadopsi model reaktif sehingga pengembang dapat fokus pada logika aplikasi tanpa harus memikirkan pembaruan UI.
- Karena masih banyak fitur yang belum didukung saat ini, ada kemungkinan keterbatasan saat mengembangkan aplikasi yang kompleks. Terutama jika Anda memerlukan fitur seperti tata letak otomatis atau banyak jendela, sebaiknya pertimbangkan toolkit lain.
- Kesederhanaan Spot dan dukungan lintas platformnya bisa sangat berguna untuk proyek kecil atau pengembangan prototipe. Namun, pada aplikasi berskala besar mungkin ada keterbatasan fitur.
- Jika komunitas dan dokumentasi Spot berkembang lebih jauh, lebih banyak pengembang akan dapat mengakses dan menggunakannya dengan mudah. Terutama akan sangat baik jika tersedia lebih banyak contoh tentang cara menulis hook dan komponen kustom.
- Kemungkinan perluasan backend Spot cukup menarik. Terutama jika dukungan yang lebih baik untuk Windows ditambahkan, lebih banyak pengembang kemungkinan akan menggunakannya.
1 komentar
Opini Hacker News
Ringkasan komentar Hacker News