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

praktik provider par 3 ( error terakhir di rubah null )

Beranda › Forums › Belajar Flutter Mobile Apps Tingkat Menengah › praktik provider par 3 ( error terakhir di rubah null )

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #103213
    Aris Sugiyono
    Participant

      hallo coach

      maaf nih masuk di praktik provider part 3 awal udah error
      ( terakhir di rubah null ) bukan menampilkan tanggal sesuai di data provider

      #103239
      Anonymous

        Hallo,
        boleh di info tentang errornya lebih detail ya.
        maksutnya ini di tampilan detail note nya pada bagian tanggal null?
        apa cuma tanggal? untuk data lain seperti title dan note nya gimana?
        bisa tolong kirimin code kamu bagian add_or_detail_screen.dart?

        #103313
        Aris Sugiyono
        Participant

          notes.dart

          import 'package:flutter/cupertino.dart';
          import 'package:praktik_state_management/models/note.dart';
          
          class Notes with ChangeNotifier {
            List<Note> _notes = [
              Note(
                id: 'N1',
                title: 'Catatan Materi Flutter',
                note:
                    'Flutter merupakan Software Development Kit (SDK) yang bisa membantu developer dalam membuat aplikasi mobile cross platform. Kelas ini akan mempelajari pengembangan aplikasi mobile yang dapat dijalankan baik di IOS maupun di Android',
                updatedAt: DateTime.parse('2021-05-19 20:33:33'),
                createdAt: DateTime.parse('2021-05-19 20:33:33'),
              ),
              Note(
                id: 'N2',
                title: 'Target Pembelajaran Flutter',
                note:
                    'Peserta dapat mengembangkan aplikasi mobile (IOS dan Android) menggunakan flutter,\nPeserta memahami konsep pengembangan aplikasi menggunakan flutter,\nPeserta dapat menjalankan aplikasi mobile di IOS dan Android ataupun Emulator,\nPeserta memahami bahasa pemrograman Dart,\nPeserta dapat mendevelop aplikasi mobile menggunakan flutter dan dart dari dasar secara berurutan.',
                updatedAt: DateTime.parse('2021-05-20 20:53:33'),
                createdAt: DateTime.parse('2021-05-20 20:53:33'),
              ),
              Note(
                id: 'N3',
                title: 'Belajar Flutter di ITBOX',
                note: 'Jangan lupa belajar flutter dengan video interactive di ITBOX.',
                updatedAt: DateTime.parse('2021-05-20 21:22:33'),
                createdAt: DateTime.parse('2021-05-20 21:22:33'),
              ),
              Note(
                id: 'N4',
                title: 'Resep nasi goreng',
                note:
                    'Nasi putih 1 piring\nBawang putih 2 siung, cincang halus\nKecap manis atau kecap asin sesuai selera\nSaus sambal sesuai selera\nSaus tiram sesuai selera\nGaram secukupnya\nKaldu bubuk rasa ayam atau sapi sesuai selera\nDaun bawang 1 batang, cincang halus\nTelur ayam 1 butir\nSosis ayam 1 buah, iris tipis\nMargarin atau minyak goreng 3 sdm.',
                updatedAt: DateTime.parse('2021-05-20 21:51:33'),
                createdAt: DateTime.parse('2021-05-20 21:51:33'),
              ),
            ];
          
            List<Note> get notes {
              List<Note> tempListNote = _notes.where((note) => note.isPinned).toList();
              tempListNote.addAll(_notes.where((note) => !note.isPinned).toList());
              return tempListNote;
            }
          
            void toogleIsPinned(String id) {
              int index = _notes.indexWhere((note) => note.id == id);
              if (index >= 0) {
                _notes[index].isPinned = !_notes[index].isPinned;
                notifyListeners();
              }
            }
          
            void addNote(Note note) {
              _notes.add(note);
              notifyListeners();
            }
          
            Note getNote(String id) {
              return _notes.firstWhere((note) => note.id == id);
            }
          }
          #103314
          Aris Sugiyono
          Participant

            note_item.dart

            import 'package:flutter/material.dart';
            import 'package:praktik_state_management/icons/icon_pin.dart';
            import 'package:praktik_state_management/models/note.dart';
            import 'package:praktik_state_management/provider/notes.dart';
            import 'package:praktik_state_management/screens/add_or_detail_screen.dart';
            import 'package:provider/provider.dart';
            
            class NoteItem extends StatefulWidget {
              //NoteItem({Key? key}) : super(key: key);
            
              final String id;
            
              NoteItem({
                @required this.id,
              });
            
              @override
              State<NoteItem> createState() => _NoteItemState();
            }
            
            class _NoteItemState extends State<NoteItem> {
              @override
              Widget build(BuildContext context) {
                final notesProvider = Provider.of<Notes>(context, listen: false);
                Note note = notesProvider.getNote(widget.id);
                return GestureDetector(
                  onTap: () => Navigator.of(context)
                      .pushNamed(addOrDetailScreen.routeName, arguments: note.id),
                  child: GridTile(
                    header: Align(
                        alignment: Alignment.topRight,
                        child: IconButton(
                          onPressed: () {
                            notesProvider.toogleIsPinned(note.id);
                          },
                          icon: Icon(note.isPinned ? Icon_pin.pin : Icon_pin.pin_outline),
                        )),
                    child: Container(
                        decoration: BoxDecoration(
                          border: Border.all(),
                          borderRadius: BorderRadius.circular(10),
                        ),
                        child: Text(note.updateAt.toString())),
                    footer: ClipRRect(
                      borderRadius: BorderRadius.only(
                          bottomLeft: Radius.circular(10),
                          bottomRight: Radius.circular(10)),
                      child: GridTileBar(
                        title: Text(note.title),
                        backgroundColor: Colors.grey,
                      ),
                    ),
                  ),
                );
              }
            }
            
            #103316
            Aris Sugiyono
            Participant

              add_or_detail_screen.dart

              import 'package:flutter/material.dart';
              import 'package:intl/intl.dart';
              import 'package:praktik_state_management/models/note.dart';
              import 'package:praktik_state_management/provider/notes.dart';
              import 'package:provider/provider.dart';
              
              class addOrDetailScreen extends StatefulWidget {
                // const addNoteScreen({Key key}) : super(key: key);
                static const routeName = '/addOrDetalNoteScreen';
              
                @override
                State<addOrDetailScreen> createState() => _addOrDetailScreenState();
              }
              
              class _addOrDetailScreenState extends State<addOrDetailScreen> {
                Note _note =
                    Note(id: null, title: '', note: '', updateAt: null, createAt: null);
              
                bool init = true;
              
                final _formKey = GlobalKey<FormState>();
              
                void submitNote() {
                  _formKey.currentState.save();
                  final now = DateTime.now();
                  _note = _note.copyWith(updateAt: now, createAt: now);
                  final notesProvider = Provider.of<Notes>(context, listen: false);
                  notesProvider.addNote(_note);
                  Navigator.pop(context);
                  print(_note.note);
                  print(_note.title);
                }
              
                @override
                void didChangeDependencies() {
                  if (init) {
                    String id = ModalRoute.of(context).settings.arguments as String;
                    _note = Provider.of<Notes>(context).getNote(id);
                    init = false;
                  }
                  super.didChangeDependencies();
                }
              
                @override
                Widget build(BuildContext context) {
                  return Scaffold(
                    appBar: AppBar(
                        actions: [TextButton(onPressed: submitNote, child: Text('Simpan'))]),
                    body: SingleChildScrollView(
                      child: Container(
                        padding: EdgeInsets.all(10),
                        child: Form(
                            key: _formKey,
                            child: Column(
                              children: [
                                TextFormField(
                                  initialValue: _note.title,
                                  decoration: InputDecoration(
                                      hintText: 'Judul', border: InputBorder.none),
                                  onSaved: (value) {
                                    _note = _note.copyWith(title: value);
                                  },
                                ),
                                TextFormField(
                                  initialValue: _note.note,
                                  decoration: InputDecoration(
                                      hintText: 'tulis catatan di sini!',
                                      border: InputBorder.none),
                                  onSaved: (value) {
                                    _note = _note.copyWith(note: value);
                                  },
                                  maxLines: null,
                                ),
                                Text('terakhir dirubah ${_note.updateAt}'),
                              ],
                            )),
                      ),
                    ),
                  );
                }
              }
              
              #103461
              Anonymous

                Halo,
                Hm… ini dari codenya sendiri aku lihat gk ada yang salah.
                bisa coba ditulisin lengkap gk ya pesan errornya seperti apa?

                #103462
                Anonymous

                  Trus kalau gk salah kamu pakai web kan ya. mungkin bisa coba pakai emulator genymotion (lebih ringan dari emulator android studio) bisa didwonload disini https://www.genymotion.com/download/ pilih download yang with virtual box ya yang ukurannya 147MB, atau kamu juga bisa pakai hp android kamu aja, disambungin langsung pakai kabel, jadi nanti runnya langsung ke hp dan gk memberatkan laptop/pc.

                  #103520
                  Aris Sugiyono
                  Participant

                    hallo coach saya lampirkan di github ya untuk error saat input code updateAt tulisan ” terakhir di rubah null ” yang seharusnya ” terakhir dirubah 20 juli .. ”

                    #103521
                    Aris Sugiyono
                    Participant
                      #103751
                      Anonymous

                        Halo,
                        Ini saya udh cek github kamu ya, ini ternyata salahnya di class note kamu ya.

                        class Note {
                          final String id;
                          final String title;
                          final String note;
                          final DateTime updateAt; //seharusnya nama ini yang harusnya diubah jadi updatedAt.
                          final DateTime createAt; //seharusnya nama ini yang harusnya diubah jadi cratedAt.
                          bool isPinned;
                        
                          Note({
                            @required this.id,
                            @required this.title,
                            @required this.note,
                            @required this.updateAt,
                            @required this.createAt,
                            this.isPinned = false,
                            DateTime updatedAt, //kenapa tambahin ini? ini didelete
                            DateTime createdAt, //kenapa tambahin ini? ini didelete
                          });

                        Jadi salahnya itu
                        constructor note kamu kamu malah mendefined variable updatedAt dan createdAt baru, padahal seharusnya menggunakan variable dari Note nya. makanya variable dari updateAt dan createAt yang sebenarnya gk ke set valuenya.

                        Jadi yang harus kamu lakuin itu
                        1. delete DateTime updatedAt dan DateTime createdAt pada constructor note,
                        2. rename final DateTime updateAt dan final DateTime createAt menjadi final DateTime updatedAt dan final DateTime createdAt
                        3. sesuaikan di code lain dimana variable updateAt itu dipanggil agar menggunakan nama variable yang sudah direname.
                        aku lihat ada 2 file yang harus diubah selain note.dart
                        ya itu add_or_detail_screen.dart dan note_item.dart
                        disana kamu menggunakan salah variable updateAt dan createAt jadi ubah jadi updatedAt dan createdAt.

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