Media Belajar Bahasa Pemrograman | by APPKEY

DartTutorial Dart 38 : Mengenal Action and Shortcut pada...

Tutorial Dart 38 : Mengenal Action and Shortcut pada Flutter

-

Last Updated on February 2, 2023 by

Di aplikasi Flutter, action and shortcut adalah hal utama untuk melakukan fungsi sederhana. Hal itu langsung melakukan Action berdasarkan aplikasi GUI. Secara umum, aplikasi ekstensif memberikan dirinya sendiri dan memastikan hal-hal yang lebih kompleks.

Action and shortcut akan meningkatkan tergantung pada nilai atau menyimpan file tergantung pada action kode. Anda dapat menemukan pengembang Flutter yang akan mengidentifikasinya berdasarkan Action pemanggilan, dan kode yang harus valid di tempat yang berbeda. Shortcut harus memenuhi syarat untuk menetapkan definisi dan meningkatkan level yang sesuai.

Dalam pembahasan kali ini, kami akan memperkenalkan pada Anda Apa itu action and shortcut dalam flutter dan bagaimana fungsi ini bekerja untuk membantu Anda.

Mengapa Menggunakan Intent Dalam Generic Action?

action and shortcut

Tentu saja, Action and Shortcut Flutter harus diidentifikasi dengan baik berdasarkan kebutuhan pakar. Dengan demikian, ini memastikan keinginan untuk tampil dengan opsi kelas Intent. Ini akan berfungsi tergantung pada persyaratan dan dapat memperbarui Generic Action dengan kinerja. Dengan memperhatikan konteks, itu harus berlaku untuk melakukan seluruh solusi untuk Callback Action dengan opsi yang lebih kompleks.

Di sisi lain, Shortcut mengambil key binding dengan berfokus pada aktivasi. Ini sederhana dan memberikan tujuan yang baik untuk mengoptimalkannya dengan kombinasi tombol. Mereka akan mengontrol dengan baik dengan mengetahui jalan pintas dan terutama adaptif dalam mengatur match intent.

Mengapa Perlu Memisahkan Action dari Intent?

Fungsi ini mencakup kemungkinan kombinasi tombol dengan memperbarui Intent dengan baik. Mereka mempertimbangkan tujuan praktis dan dapat mengeksplorasi perubahan dalam action definitions. Mereka memegang kendali penuh dan dapat menetapkan opsi otomatis dengan pemenuhan. Hal ini dimaksudkan untuk mengetahui konteks terfokus dengan menetapkan tentang action definitions. Mereka menyimpulkan mapping definitions dengan berfokus pada memisahkan masalah dengan tujuan yang baik.

Misalnya, Flutter memiliki ActivateIntentwidget yang memetakan setiap jenis kontrol ke versi yang sesuai dari suatu ActivateAction (dan yang mengeksekusi kode yang mengaktifkan kontrol). Kode ini seringkali membutuhkan akses yang cukup pribadi untuk melakukan tugasnya. Jika lapisan tipuan Intent tambahan yang disediakan tidak ada, definisi action perlu ditingkatkan ke tempat instance penentu Shortcutswidget dapat melihatnya, menyebabkan Shortcut memiliki lebih banyak pengetahuan daripada yang diperlukan tentang action mana yang harus dilakukan. Invoking dan having akses ke atau memberikan status yang belum tentu dimiliki atau dibutuhkan sebaliknya. Ini memungkinkan kode Anda untuk memisahkan dua masalah agar lebih mandiri.

Maksud mengonfigurasi action sehingga action yang sama dapat melayani beberapa kegunaan. Contohnya adalah DirectionalFocusIntent, yang mengambil arah untuk memindahkan fokus, memungkinkan DirectionalFocusAction untuk mengetahui ke arah mana fokus harus dipindahkan. Berhati-hatilah: jangan meneruskan status dalam Intent yang berlaku untuk semua pemanggilan sebuah Action: status semacam itu harus diteruskan ke konstruktor dari Action dirinya sendiri, agar Intent tidak perlu tahu terlalu banyak.

Artikel Terkait  Tutorial Dart 26 : Layout Flutter, Ayo Belajar Cara Membuatnya

Apa Yang Dapat Meningkatkan Action And Shortcut?

Tentunya pengembangan aplikasi Flutter harus dimulai dalam memilih intext dan lainnya. Mereka menemukan lebih banyak hal dan dapat mengidentifikasi opsi kontrol tipe. Ini akan memutuskan dengan menentukan contoh untuk shortcut dengan berfokus pada invoking dan having action dalam ukuran yang diperlukan. Ini memungkinkan kode Anda memisahkan dua masalah dengan opsi yang lebih independen.

Mereka menganggap tujuan praktis dan dapat bekerja dengan baik pada akses pribadi dengan operasi yang diperlukan. Ini akan ditentukan dengan baik dengan memilih tipuan dengan cara pintas dan lainnya. Fokus arah harus memenuhi syarat dan memperhatikan perubahan dalam action.

Pemanggilan harus fleksibel dan menetapkan opsi maksud yang diterapkan pada arah untuk memindahkan opsi fokus. Ini memungkinkan Anda untuk mengetahui kebutuhan mendesak sepenuhnya dalam beberapa penggunaan ganda.

Mengapa Tidak Menggunakan Callback?

action and shortcut

Pernahkah Anda bertanya-tanya tentang hal-hal itu? Tentu saja, pengembangan Flutter harus memperhatikan perubahan pada key binding dan mengimplementasikannya bergantung pada binding. Mereka memastikan solusi yang baik untuk action untuk memutuskan tentang hal yang benar.

Ini akan diaktifkan dengan menerapkan opsi Diaktifkan dengan fungsi Callback. Tanpa kerumitan, mereka menyediakan Action and Shortcut dengan berfokus pada widget. Implementasinya harus fleksibel dan memperbarui key binding di tempat yang berbeda.

class CallbackShortcuts extends StatelessWidget {

  const CallbackShortcuts({

    super.key,

    required this.bindings,

    required this.child,

  });

 

  final Map<ShortcutActivator, VoidCallback> bindings;

  final Widget child;

 

  @override

  Widget build(BuildContext context) {

    return Focus(

      onKey: (node, event) {

        KeyEventResult result = KeyEventResult.ignored;

        for (final ShortcutActivator activator in bindings.keys) {

          if (activator.accepts(event, RawKeyboard.instance)) {

            bindings[activator]!.call();

            result = KeyEventResult.handled;

          }

        }

        return result;

      },

      child: child,

    );

  }

}

Shortcut

Action membantu menemukan Shortcut keyboard untuk menampilkan widget. Mereka menganggap peran vital dan mengeksplorasi perubahan dalam kasus yang terlibat dalam mengikat mereka. Itu disisipkan dengan hierarki widget untuk mendefinisikan dengan baik dengan berfokus pada Wrapping dengan Shortcut keyboard. Shortcut harus diidentifikasi tergantung pada opsi intent.

Seperti yang akan Anda lihat di bawah, action berguna dengan sendirinya, tetapi kasus penggunaan yang paling umum melibatkan mengikatnya ke shortcut keyboard. Inilah gunanya Shortcuts widget.

Itu dimasukkan ke dalam hierarki widget untuk menentukan kombinasi tombol yang mewakili intent pengguna saat kombinasi tombol itu ditekan. Untuk mengonversi tujuan yang dimaksud untuk kombinasi tombol menjadi action nyata, Actionswidget digunakan untuk memetakan ke Intentfile Action. Misalnya, Anda dapat menentukan SelectAllIntent, dan mengikatnya ke milik Anda SelectAllAction atau ke CanvasSelectAllAction, dan dari satu key binding itu, sistem akan memanggil salah satunya, bergantung pada bagian mana dari aplikasi Anda yang memiliki fokus. Mari kita lihat cara kerja bagian key binding :

@override

Widget build(BuildContext context) {

  return Shortcuts(

    shortcuts: <LogicalKeySet, Intent>{

      LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyA):

          SelectAllIntent(),

    },

    child: Actions(

      dispatcher: LoggingActionDispatcher(),

      actions: <Type, Action<Intent>>{

        SelectAllIntent: SelectAllAction(model),

      },

      child: Builder(

        builder: (context) => TextButton(

          child: const Text('SELECT ALL'),

          onPressed: Actions.handler<SelectAllIntent>(

            context,

            SelectAllIntent(),

          ),

        ),

      ),

    ),

  );

}

Peta yang diberikan ke Shortcutswidget memetakan sebuah LogicalKeySet (atau sebuah ShortcutActivator) ke sebuah Intentinstance. Set kunci logis mendefinisikan satu set satu atau lebih kunci, dan intent menunjukkan tujuan yang dimaksudkan dari penekanan tombol. ShortcutsWidget mencari penekanan tombol di peta, untuk menemukan instance Intent, yang diberikannya ke metode action invoke().

Artikel Terkait  Tutorial Dart 9 : Bagaimana Cara Membuat Dart List? Berikut Tipsnya!

Shortcut Manager

Shortcut manager harus mengambil objek berumur panjang dengan menyetel widget. Mereka memastikan peristiwa penting melewati logika. Mereka akan maju dalam mengidentifikasi kunci dan menyertakan alasan untuk berjalan. Pertimbangannya cukup tinggi dan beradaptasi dalam kombinasi tombol. Maksud selalu mampu mengidentifikasi hasil dengan pemetaan shortcut.

Mereka memastikan solusi yang baik dan menyertakan acara penting untuk diperbarui dan diterima. Ini akan membutuhkan complete pledge tentang kebutuhan kontrol dan map of key combinations. Mereka dimaksudkan untuk bekerja dengan shortcut manager dan biasanya diinginkan untuk shortcut widget.

Meskipun perilaku default Shortcut Manager biasanya diinginkan, Shortcutswidget mengambil ShortcutManager subkelas yang dapat Anda sesuaikan untuk menyesuaikan fungsinya.

Misalnya, jika Anda ingin mencatat setiap kunci yang ditangani oleh Shortcuts widget, Anda dapat membuat LoggingShortcutManager :

class LoggingShortcutManager extends ShortcutManager {

  @override

  KeyEventResult handleKeypress(BuildContext context, RawKeyEvent event) {

    final KeyEventResult result = super.handleKeypress(context, event);

    if (result == KeyEventResult.handled) {

      print('Handled shortcut $event in $context');

    }

    return result;

  }

}

Sekarang, setiap kali Shortcutswidget menangani Shortcut, peristiwa utama dan konteks yang relevan akan dicetak.

Action

action and shortcut

Di sisi lain, action diizinkan dengan definition berdasarkan operasi. Ini termasuk kinerja berdasarkan permintaan mereka dengan intent. Action harus diaktifkan atau dinonaktifkan untuk menerimanya dengan intent. Mereka terutama fokus pada berkumpul dengan mereka untuk memungkinkan konfigurasi dengan langkah-langkah.

Action Definitions

Action, dalam bentuknya yang paling sederhana, hanyalah subkelas dari Action<Intent>sebuah metode invoke(). Inilah action sederhana yang hanya memanggil fungsi pada model yang disediakan:

class SelectAllAction extends Action<SelectAllIntent> {

  SelectAllAction(this.model);

 

  final Model model;

 

  @override

  void invoke(covariant SelectAllIntent intent) => model.selectAll();

}

Atau, jika terlalu merepotkan untuk membuat kelas baru, gunakan CallbackAction:

CallbackAction(onInvoke: (intent) => model.selectAll());

Setelah Anda memiliki action, Anda menambahkannya ke aplikasi Anda menggunakan Actions widget, yang membawa peta Intent tipe ke Actions:

@override

Widget build(BuildContext context) {

  return Actions(

    actions: <Type, Action<Intent>>{

      SelectAllIntent: SelectAllAction(model),

    },

    child: child,

  );

}

Shortcuts Widget menggunakan Focus konteks widget dan untuk Actions.invoke menemukan action mana yang akan diminta. Jika Shortcutswidget tidak menemukan tipe maksud yang cocok di Actions widget pertama yang ditemukan, widget akan mempertimbangkan ancestor Actions widget berikutnya, dan seterusnya, hingga mencapai akar widget tree, atau menemukan tipe intent yang cocok dan memanggil action yang sesuai.

Invoking Action

Sistem action memiliki beberapa cara untuk invoke action. Sejauh ini cara yang paling umum adalah melalui penggunaan Shortcuts widget yang dibahas di bagian sebelumnya, tetapi ada cara lain untuk menginterogasi subsistem action dan meminta action. Dimungkinkan untuk meminta action yang tidak terikat pada kunci.

Misalnya, untuk menemukan action yang terkait dengan maksud, Anda bisa menggunakan:

Action<SelectAllIntent>? selectAll =

    Actions.maybeFind<SelectAllIntent>(context);

Kode ini mengembalikan Action yang terkait dengan SelectAllIntent jenis jika tersedia dalam file context. Jika tidak tersedia, ia mengembalikan nol. Jika asosiasi Action harus selalu tersedia, gunakan find alih-alih maybeFind, yang melontarkan pengecualian saat tidak menemukan Intent jenis yang cocok.

Untuk invoke action (jika ada), panggil:

Object? result;

if (selectAll != null) {

  result = Actions.of(context).invokeAction(selectAll, SelectAllIntent());

}

Gabungkan kode itu menjadi satu panggilan dengan yang berikut:

Object? result =

    Actions.maybeInvoke<SelectAllIntent>(context, SelectAllIntent());

Terkadang Anda ingin menjalankan action sebagai akibat dari menekan tombol atau kontrol lainnya. Lakukan ini dengan Actions.handler fungsi, yang membuat penutupan penanganan jika intent memiliki pemetaan ke action yang diaktifkan, dan mengembalikan nol jika tidak, sehingga tombol dinonaktifkan jika tidak ada action aktif yang cocok dalam konteks:

@override

Widget build(BuildContext context) {

  return Actions(

    actions: <Type, Action<Intent>>{

      SelectAllIntent: SelectAllAction(model),

    },

    child: Builder(

      builder: (context) => TextButton(

        child: const Text('SELECT ALL'),

        onPressed: Actions.handler<SelectAllIntent>(

          context,

          SelectAllIntent(controller: controller),

        ),

      ),

    ),

  );

}

ActionsWidget hanya memanggil action saat mengembalikan true , isEnabled(Intent intent) memungkinkan action untuk memutuskan apakah operator harus mempertimbangkannya untuk pemanggilan. Jika action tidak diaktifkan, maka Actionswidget memberikan action lain yang diaktifkan lebih tinggi dalam hierarki widget (jika ada) kesempatan untuk dieksekusi.

Artikel Terkait  Tutorial Dart 43 : Macam-Macam Flutter State Management Library

Contoh sebelumnya menggunakan Builder karena Actions.handler dan Actions.invoke(sebagai contoh) hanya menemukan action di dalam provide context, dan jika contoh meneruskan yang context diberikan ke build fungsi, kerangka kerja mulai mencari di atas widget saat ini. Menggunakan sebuah Builder memungkinkan kerangka kerja untuk menemukan action yang ditentukan dalam build fungsi yang sama.

Anda dapat memanggil action tanpa memerlukan BuildContext, tetapi karena Actionswidget memerlukan konteks untuk menemukan action yang diaktifkan untuk dipanggil, Anda harus menyediakannya, baik dengan membuat Actioninstance Anda sendiri, atau dengan menemukan satu dalam konteks yang sesuai dengan Actions.find.

Untuk memanggil action, teruskan action ke invoke metode pada ActionDispatcher, baik yang Anda buat sendiri, atau yang diambil dari Actionswidget yang ada menggunakan Actions.of(context) metode. Periksa apakah action diaktifkan sebelum memanggil invoke. Tentu saja, Anda juga dapat memanggil invoke action itu sendiri, meneruskan Intent, tetapi kemudian Anda memilih keluar dari layanan apa pun yang mungkin disediakan oleh operator action (seperti pencatatan, batalkan/ulangi, dan sebagainya).

Action Dispatcher

Untuk menghemat sebagian besar waktu, Anda hanya ingin menjalankan suatu action, membuatnya melakukan tugasnya, dan melupakannya. Namun, kadang-kadang, Anda mungkin ingin mencatat action yang dijalankan.

Di sinilah mengganti default Action Dispatcher dengan custom dispatcher . Anda meneruskan ActionDispatcher ke Actionswidget Anda, dan itu meminta action dari Actionswidget manapun di bawahnya yang tidak menetapkan operatornya sendiri.

Hal pertama yang dilakukan Actions saat menjalankan suatu tindakan adalah mencari ActionDispatcher dan meneruskan action ke sana untuk dipanggil. Jika tidak ada, itu membuat default ActionDispatcher yang hanya memanggil action.

Namun, jika Anda ingin log dari semua action invoke, Anda dapat membuatnya sendiri LoggingActionDispatcher untuk melakukan pekerjaan itu:

class LoggingActionDispatcher extends ActionDispatcher {

  @override

  Object? invokeAction(

    covariant Action<Intent> action,

    covariant Intent intent, [

    BuildContext? context,

  ]) {

    print('Action invoked: $action($intent) from $context');

    super.invokeAction(action, intent, context);

 

    return null;

  }

}

Actions Kemudian meneruskannya ke widget tingkat atas:

@override

Widget build(BuildContext context) {

  return Actions(

    dispatcher: LoggingActionDispatcher(),

    actions: <Type, Action<Intent>>{

      SelectAllIntent: SelectAllAction(model),

    },

    child: Builder(

      builder: (context) => TextButton(

        child: const Text('SELECT ALL'),

        onPressed: Actions.handler<SelectAllIntent>(

          context,

          SelectAllIntent(),

        ),

      ),

    ),

  );

}

Kode ini mencatat setiap action saat dijalankan, seperti:

flutter: Action invoked: SelectAllAction#906fc(SelectAllIntent#a98e3) from Builder(dependencies: _[ActionsMarker])

Action And Shortcut

Dengan demikian, Anda dapat menggunakan action and shortcut secara bersamaan. Mereka memastikan solusi yang baik dan intent untuk bekerja pada kebutuhan khusus. Mereka menyampaikan konsep dengan aplikasi dengan baik. Dengan demikian, dibutuhkan complete pledge dan menyertakan tombol di sebelahnya. Jadi, kontrol harus terlibat dalam menyelesaikan pekerjaan mereka. Semua tindakan yang terlibat harus beradaptasi dengan pintasan yang dicatat dalam level widget.

Temukan lebih banyak artikel seri belajar Dart maupun bahasa pemrograman lainnya hanya di CODEKEY. Klik https://codekey.id/ sekarang juga untuk langsung belajar gratis. Sampai bertemu lagi!


Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.

Jasa Pembuatan Aplikasi

Jasa Pembuatan Website

Jasa Pembuatan Paket Aplikasi

Jasa Pembuatan Internet Marketing

Tutorial

Subscribe Sekarang

Dapatkan beragam informasi menarik tentang bahasa pemrograman langsung melalui email Anda. Subscribe sekarang dan terus belajar bersama kami!

Blog Post Ranking 10

Tutorial PHP 22 : Cara Membuat Redirect PHP dengan Cepat dan Mudah

Jika Anda melakukan browsing di browser kesayangan Anda, mungkin Anda pernah melihat link yang berisikan “php redirect” atau yang...

Tutorial PHP 23 : Cara Membuat Messages Alert PHP

Alert box atau alert messages digunakan di situs web untuk menampilkan pesan peringatan kepada pengguna bahwa mereka telah memasukkan...

Tutorial PHP 2 : Cara Install PHP, Langkah Awal Belajar PHP

PHP adalah bahasa pemrograman gratis dan open source. Secara teknis tidak perlu menginstal PHP: sebagian besar host web dan...

Tutorial Python 9 : Cara Membuat Looping Python

Pada artikel sebelumnya, Codekey telah menjelaskan tentang Operasi Kondisional Python yang di dalamnya menyinggung tentang percabangan dan perulangan. Belajar...

Tutorial HTML/CSS 23 : Cara Membuat Form Sederhana dengan HTML

Form memiliki peran yang sangat krusial bagi website atau aplikasi untuk menjaga sistem keamanannya. Form HTML digunakan untuk mengumpulkan...

Tutorial SQL 8 : Constraint SQL, Bagaimana Fungsi dan Penggunaannya?

Pada artikel sebelumnya Anda telah mempelajari tentang wildcard SQL, pada artikel kali ini kami akan menjelaskan tentang constraint SQL. Jika...

Tutorial Javascript 8 : Array Javascript, Panduan Lengkap Cara Membuatnya

Seperti bahasa pemrograman yang berorientasi objek lainnya, dalam JavaScript juga terdapat array. Jika Anda memiliki banyak objek yang ingin...

Tutorial SQL 20 : Mari Pelajari Cara Menggunakan Fungsi GROUP by SQL

Pada pembahasan seri Tutorial SQL ke- 20 ini, Codekey akan membahas tentang GROUP BY yang merupakan statement di dalam...

Tutorial Python 7 : Python String Format dan Cara Mudahnya

Anda ingin belajar Python dan ingin menjadi ahli dalam bahasa pemrograman Python? Mari belajar bersama Codekey! Pada pembahasan kali...

Tutorial Python 8 : Langkah Mudah Membuat Operasi Kondisional pada Python

Pada pembahasan sebelumnya, Codekey telah menjelaskan kepada Anda tentang pengoperasian string pada Python mulai dari menggabungkan hingga memanipulasi string...

Bisnis

Online Service

Peluang Bisnis

Model Bisnis

Entrepreneurship

Uang

Ketrampilan

Outsourcing

Monetize

Pemasaran

SEO

Internet Marketing

Dasar Pemasaran

Strategi Pemasaran

Situs Web Analitik

Iklan

Teknologi

Teknologi Terbaru

AI

Komputer

Jaringan

Paling Sering dibaca
Mungkin Anda Menyukainya