Adakah yang bisa membantu saya cara kerja async dan await? Program mengeluh bahwa db adalah null saat memanggil rawQuery(...). Yang saya pahami adalah pernyataan berikutnya setelah await tidak akan dieksekusi ketika fungsi dengan await belum selesai, tetapi pernyataan setelah fungsi async tidak akan menunggu fungsi itu menyelesaikan pekerjaannya. Sebagai contoh:

var db;

Widget build(BuildContext context) {
    ...
    List<Map<String, Object>> resultSet;
    asyncFunction();
    db.rawQuery(...).then((value) => resultSet = value);
    return Scaffold(
        appBar: AppBar(...),
        child: Text()
    );
     
}

void asyncFunction() async {
    String dbPath = await getDatabasesPath();
    String path = join(dbPath, 'sample.db');
    db = await openDatabase(path);
}

db adalah null dalam db.rawQuery(...). (Saya harap Anda mengerti maksud saya). Saya tidak tahu apakah mungkin untuk memasukkan return Scaffold() ke dalam then(...) atau mungkinkah Widget build() {...} menunggu sampai semua data siap.

1
Naruto Uzumaki 4 April 2021, 23:43

1 menjawab

Jawaban Terbaik

EDIT: Maaf, saya tidak memperhatikan bahwa Anda menggunakan metode pembuatan widget.

Pertama, jika Anda memanggil database Anda di sini, Anda akan memanggil database Anda SETIAP WAKTU widget Anda dibangun kembali. Itu bukan praktik yang baik. Anda perlu membuat instance database Anda di tempat lain (dalam layanan misalnya). Setelah data Anda dimuat, Anda dapat memanggilnya di sini.

Kedua, jika Anda ingin menampilkan data dari Masa Depan. Anda perlu menggunakan FutureBuilder, seperti yang dikatakan @jamesdlin.

0
rigorousCode 4 April 2021, 22:01