Upgrade Skill Di ITBOX Jadi Lebih Hemat
Special Diskon 50%
Sampai 16 November 2026!
Hari
Jam
Menit
Detik
GARUDABOX

Mapping TYPE

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #49392
    Setiawan
    Participant

      siang coach,
      saya ada json yg tak buat jadi list type 2
      ada type <Keyword> dan type <Key>

         {
            "keyword": [
              {
                  "id": "66",
                  "genre_id": "5",
                  "keyword": "Hijab Printing",
                  "status_id": "2",
                  "created_at": "2022-03-12 15:59:36",
                  "updated_at": "2022-03-12 15:59:36"
              },
              {
                  "id": "67",
                  "genre_id": "5",
                  "keyword": "Hijab Custom",
                  "status_id": "2",
                  "created_at": "2022-03-12 15:59:36",
                  "updated_at": "2022-03-12 15:59:36"
              }
           ],
           "key": [
              {
                  "id": "26",
                  "user_id": "36196",
                  "keyword_id": "26"
              },
              {
                  "id": "27",
                  "user_id": "36196",
                  "keyword_id": "27"
              }
            ]
         }
      

      nah saya mau buat select option chip pakai package multi_select_flutter
      seperti berikut,

      Column(
                                      children: <Widget>[
                                        MultiSelectDialogField<respEdit.Keyword>(
                                          buttonIcon: Icon(Icons.arrow_drop_down, color: Colors.grey.shade600),
                                          key: _multiSelectKey,
                                          decoration: BoxDecoration(
                                            border: Border.all(
                                              color: Colors.grey,
                                              width: 1,
                                            ),
                                            borderRadius: BorderRadius.circular(8),
                                          ),
                                          initialValue: e.dataIdentitasEdit.keyword.toList(),
                                          listType: MultiSelectListType.CHIP,
                                          searchable: true,
                                          buttonText: Text(
                                            "Keyword",
                                            style: tBodyText.copyWith(),
                                          ),
                                          title: Text("PILIH 5 KEYWORD", style: tBodyText.copyWith()),
                                          itemsTextStyle: tBodyText.copyWith(),
                                          selectedItemsTextStyle: tBodyText.copyWith(color: Colors.white),
                                          selectedColor: secondaryColors,
                                          confirmText: Text("OK", style: tBodyText.copyWith()),
                                          cancelText: Text("CANCEL", style: tBodyText.copyWith()),
                                          // items: e.dataIdentitasEdit.key.map((e) => MultiSelectItem<respEdit.Key>(e, e.deskripsiKey)).toList(),
                                          items: e.dataIdentitasEdit.keyword.map((e) => MultiSelectItem<respEdit.Keyword>(e, e.keyword)).toList(),
                                          validator: (values) {
                                            if (values!.length > 5) {
                                              return "Maksimal 5";
                                            }
                                            return null;
                                          },
                                          autovalidateMode: AutovalidateMode.onUserInteraction,
                                          onConfirm: (values) {
                                            _multiSelectKey.currentState?.validate();
                                            var check = _multiSelectKey.currentState?.validate();
                                            if (check == false) {
                                            } else {
                                              print(values);
                                              _selectedKeyword = values;
                                            }
                                          },
                                          chipDisplay: MultiSelectChipDisplay(
                                            chipColor: secondaryColors,
                                            textStyle: tBodyText.copyWith(color: Colors.white),
                                            items: e.dataIdentitasEdit.key.map((e) => MultiSelectItem<respEdit.Keyword>(e, e.keyword)).toList(),
                                            onTap: (value) {},
                                          ),
                                        ),
                                      ],
                                    ),

      nah masalahnya ada di bagian chip displaynya

                                          chipDisplay: MultiSelectChipDisplay(
                                            chipColor: secondaryColors,
                                            textStyle: tBodyText.copyWith(color: Colors.white),
                                            items: e.dataIdentitasEdit.key.map((e) => MultiSelectItem<respEdit.Keyword>(e, e.keyword)).toList(),
                                            onTap: (value) {},
                                          ),

      di bagian items harusnya mengambil data dari list<Key> tetapi karena MultiSelectDialogField itu merajuk ke list<Keyword>

      bagaimana cara mapping agar list<Key> bisa masuk ke list<Keyword> di bagian items chipDisplay

      terimakasih,

      #49403
      Anonymous

        Hai Setiawan,

        Maksutnya bagaiman kah? kamu mau mapping agar list key sesuai dengan list keyword?
        jadi misal isi dari key nya keyword_id = 15, kamu mau sesuaiin/ambil nilai dari keyowrd yang memiliki id 15 kah?

        #49409
        Setiawan
        Participant

          kan saya mau buat multiple selection dengan dua list type

          list<keyword> adalah semua daftar pilihan, sementara
          list<key> adalah daftar yg sudah dipilih,

          nah saya mau memasukkan value list<key> kedalam
          items: e.dataIdentitasEdit.key.map((e) => MultiSelectItem<respEdit.Keyword>(e, e.keyword)).toList(),

          tetapi ada pesan error

          The getter ‘keyword’ isn’t defined for the type ‘Key’.
          Try importing the library that defines ‘keyword’, correcting the name to the name of an existing getter, or defining a getter or field named ‘keyword’.

          gimana coach cara ngakalin case ini? intinya saya mau memasukkan list<key> kedalam items tadi

          #49448
          Anonymous

            Hi Setiawan,

            Dari code dan error yang diberikan aku dapat simpulkan bahwa error tersebut disebakan karena variable Key pada dataIdentitasEdit tidak mempunyai variable/data keyword. Jika kamu mau menampilkan nilai keyword dari variable keyword maka berdasarkan data JSON yang kamu kasi

            {
                "keyword": [
                {
                    "id": "66",
                    "genre_id": "5",
                    "keyword": "Hijab Printing",
                    "status_id": "2",
                    "created_at": "2022-03-12 15:59:36",
                    "updated_at": "2022-03-12 15:59:36"
                },
                {
                    "id": "67",
                    "genre_id": "5",
                    "keyword": "Hijab Custom",
                    "status_id": "2",
                    "created_at": "2022-03-12 15:59:36",
                    "updated_at": "2022-03-12 15:59:36"
                }
                ],
                "key": [
                {
                    "id": "26",
                    "user_id": "36196",
                    "keyword_id": "26"
                },
                {
                    "id": "27",
                    "user_id": "36196",
                    "keyword_id": "27"
                }
                ]
            }

            data dari variable key berisi keyword_id yang merupakan nilai id dari data keyword, nah dari itu kamu bisa ngemapping variable Key untuk mengambil/membaca data dari keyword berdasarkan keyword_id. contohnya seperti ini:

            items: e.dataIdentitasEdit.key.map((e) => MultiSelectItem<respEdit.Keyword>(e, e.dataIdentitasEdit.keyword.firstWhere((element) => element.id == e.keywordId).keyword)).toList(),

            kalau mau lebih rapi bagian e.dataIdentitasEdit.keyword.firstWhere((element) => element.id == e.keywordId).keyword dijadiin sebuah function pada class/object dataIdentitasEdit. sehingga nanti bisa dipersingkat codenya menjadi ini
            items: e.dataIdentitasEdit.key.map((e) => MultiSelectItem<respEdit.Keyword>(e, e.dataIdentitasEdit.findKeywordById(e.keywordId).keyword)).toList(),

            Semoga menjawab permasalahannya.

          Viewing 4 posts - 1 through 4 (of 4 total)
          • You must be logged in to reply to this topic.
          Shopping cart0
          There are no products in the cart!
          Continue shopping