Beranda › Forums › Belajar Flutter Mobile Apps Tingkat Menengah › praktik provider par 3 ( error terakhir di rubah null )
- This topic has 9 replies, 2 voices, and was last updated 4 years, 3 months ago by Anonymous.
-
AuthorPosts
-
July 28, 2022 at 3:05 PM #103213
hallo coach
maaf nih masuk di praktik provider part 3 awal udah error
( terakhir di rubah null ) bukan menampilkan tanggal sesuai di data providerJuly 29, 2022 at 11:38 AM #103239AnonymousHallo,
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?August 1, 2022 at 7:27 AM #103313notes.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); } }August 1, 2022 at 7:28 AM #103314note_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, ), ), ), ); } }August 1, 2022 at 7:33 AM #103316add_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}'), ], )), ), ), ); } }August 1, 2022 at 7:59 PM #103461AnonymousHalo,
Hm… ini dari codenya sendiri aku lihat gk ada yang salah.
bisa coba ditulisin lengkap gk ya pesan errornya seperti apa?August 1, 2022 at 8:03 PM #103462AnonymousTrus 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.
August 2, 2022 at 10:57 PM #103520August 2, 2022 at 10:58 PM #103521August 7, 2022 at 4:46 PM #103751AnonymousHalo,
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. -
AuthorPosts
- You must be logged in to reply to this topic.