Note yang terakhir saat di pin membuat note yang lain ikut ter pin

Beranda › Forums › Belajar Flutter Mobile Apps Tingkat Menengah › Note yang terakhir saat di pin membuat note yang lain ikut ter pin

Tagged: 

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #103317
    Vram Adel Handrio
    Participant

      Dear coach…

      Menyambung pertanyaan saya saat sesi Consultation class via zoom…adanya note yang saat di pin membuat note yang lain terpin juga…berikut kode saya di github coach.. https://github.com/Vram-AH/aplikasi-notes-flutter ..

      Terimakasih sebelumnya coach..

      #103460
      Anonymous

        Halo,
        barusan saya sudah cobain code kamu, dan masalahnya itu ada di file notes.dart function toggleIsPinned line 69,
        ini code nya kamu :

        Future<void> toggleIsPinned(String? id) async {
          int index = notes.indexWhere((note) => note.id == id);
          
          //code lainnya dimana kamu ubah value isPinned pada variable _notes dengan index dari function notes yang sudah disortir.
        }

        disitu kamu menggunakan notes.indexWhere….
        notes yang kamu gunaiin itu sebuah function get notes yang kita gunaiin untuk get list notes yang sudah disortir dengan urutan note yang memiliki value isPinned true diurutan awal.

        function notes yang aku maksut itu yang ini:

        List<Note> get notes {
          List<Note> tempListNote = _notes.where((note) => note.isPinned).toList();
          tempListNote.addAll(_notes.where((note) => !note.isPinned).toList());
          return tempListNote;
        }

        sehingga pada saat menjalankan code ini
        notes.indexWhere((note) => note.id == id);
        index yang diberikan salah, karena urutannya sudah berbeda. makanya value isPinned yang kita ubah jadi salah
        karena index yang salah.
        jadi contoh yang seharusnya note dengan id B di list asli (tanpa sortir) itu ada diurutan ke 2, tapi karena kamu menggunakan notes list yang sudah disortir buat mencari indexnya maka kita mendapatkan value 3. sehingga pada saat kita mengubah value isPinnednya yang seharusnya kita mengubah value pada index 2 malah menjadi mengubah note pada index ke 3 yang salah.

        jadi untuk memperbaikinya
        cukup mengubah notes menjadi _notes

        Future<void> toggleIsPinned(String? id) async {
          // menampung atau mencari note dengan id yang sama
          int index = _notes.indexWhere((note) => note.id == id); //bagian ini yang diubah
          
          try {
            // melakukan validasi
            if (index >= 0) {
              _notes[index].isPinned = !_notes[index].isPinned;
              // ganti tanggal update pada server
              _notes[index] = _notes[index].copyWith(updatedAt: DateTime.now());
              // tambahkan notifier untuk memberi tau widget yang listen ke provider bahwa data sudah berubah
              notifyListeners();
              // panggil fungsi toggleIsPinned pada API sebelum notifyListeners
              await NoteApi().toggleIsPinned(
                  id, _notes[index].isPinned, _notes[index].updatedAt!);
              // setelah update toggleIspinned ke API maka akan update toggleIspinned di databaseHelper
              await DatabaseHelper().toogleIspinned(
                id,
                _notes[index].isPinned,
                _notes[index].updatedAt!,
              );
            }
          } catch (e) {
            _notes[index].isPinned = !_notes[index].isPinned;
            notifyListeners();
            return Future.error(e);
          }
        }
        #103470
        Vram Adel Handrio
        Participant

          sudah bisa berjalan coach kode nya…terimakasih banyak coach atas penjelasan nya..

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