Membaca data dari url dalam Daftar

Oct 15 2020

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

julemand101 Oct 15 2020 at 07:29

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