Membaca data dari url dalam Daftar
Saya tahu saya dapat membaca data dari URL sebagai:
import 'dart:convert';
import 'dart:io';
new HttpClient().getUrl(Uri.parse('https://docs.google.com/spreadsheets/d/e/2PACX-1vQvf9tp4-fETDJbC-HRmRKvVFAXEAGO4lrYPpVeiYkB6nqqXdSs3CjX0eBMvjIoEeX9_qU6K2RWmzVk/pub?gid=0&single=true&output=csv'))
.then((HttpClientRequest request) => request.close())
.then((HttpClientResponse response) => response.transform(new Utf8Decoder()).listen(print));
Dimana cetakan di atas tanggapan yang saya dapatkan. Juga, saya tahu bahwa string baca dapat dimasukkan ke dalam file dengan mengganti pernyataan terakhir menjadi:
.then((HttpClientResponse response) => response.pipe(new File('foo.txt').openWrite()));
Di sisi lain, saya tahu saya bisa memasukkan string ke CSV sebagai:
// dependencies: csv: ^4.0.3
import 'package:csv/csv.dart';
List<List<dynamic>> rowsAsListOfValues = const CsvToListConverter().convert(yourString);
Tetapi bagaimana saya bisa menggabungkan mereka bersama-sama, sehingga saya membaca data dari url menggunakan httpseperti yang ditunjukkan di atas, dan mendekode respon yang dikembalikan menjadi csvvariabel?
Jawaban
Saya pikir Anda akan memiliki waktu yang lebih mudah jika Anda menandai metode Anda dengan asyncsehingga Anda dapat menggunakan awaitkata kunci daripada mencoba menggunakan .then()metode tersebut. Jadi seperti ini:
import 'dart:convert';
import 'dart:io';
import 'package:csv/csv.dart';
Future<void> main() async {
print(await csv());
}
Future<List<List<dynamic>>> csv() async {
final request = await HttpClient().getUrl(Uri.parse(
'https://docs.google.com/spreadsheets/d/e/2PACX-1vQvf9tp4-fETDJbC-HRmRKvVFAXEAGO4lrYPpVeiYkB6nqqXdSs3CjX0eBMvjIoEeX9_qU6K2RWmzVk/pub?gid=0&single=true&output=csv'));
final response = await request.close();
final csvString = await response.transform(const Utf8Decoder()).first;
return const CsvToListConverter().convert(csvString);
}
Anda dapat membaca lebih lanjut tentang ini di sini: https://dart.dev/codelabs/async-await