4 poin oleh GN⁺ 2024-05-26 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-05-26

Opini Hacker News

Ringkasan komentar Hacker News

  • Akan bagus jika platform yang didukung dicantumkan di README. Disarankan menulisnya seperti dokumentasi Flutter.
  • Saya ingin membuat alat pengembangan internal menggunakan Go, dan saat ini memakai Wails serta merasa puas dengannya. Proyek ini juga tampak menarik dan layak untuk dilihat.
  • Saya pikir Go bisa memberikan pengalaman yang baik untuk pengembangan UI lintas platform.
    • Mengelola kompleksitas build adalah salah satu kesulitan besar dalam pengembangan lintas platform, dan Go hampir menghilangkan masalah itu.
    • Saya penasaran bagaimana tata letak lintas platform ditangani ketika ukuran kontrol native berbeda di setiap platform.
  • Saya penasaran apa keuntungan dari pendekatan pohon kontrol virtual.
    • Saya ingin tahu kelebihannya dibanding langsung memperbarui kontrol yang ditampilkan kepada pengguna.
  • Saya sudah mencari sesuatu seperti ini sejak beberapa tahun lalu.
    • Saya butuh dukungan Windows, jadi beralih ke C++ dan menggunakan wxWidgets.
  • Usahanya patut diapresiasi, tetapi lintas platform tanpa dukungan Windows terasa disayangkan.
  • Seandainya saya tahu proyek ini 3 minggu lalu.
    • Saya pikir React atau framework mirip React yang di-port ke Go akan memberikan pengalaman pengembangan yang luar biasa.
  • Fltk mendukung Windows.
    • Saya penasaran apakah Windows belum didukung karena menggunakan solusi lain.
  • Saya penasaran apakah kode ini berarti GOMAXPROCS harus diatur minimal ke 2.
  • Saya penasaran bagaimana build lintas platform dilakukan.
    • Akan bagus jika ada perintah untuk menghasilkan MacOS .app dan Windows exe tanpa harus menyelesaikan masalah manajemen paket per platform, container, dan penandatanganan.