Flutter 如何创建具有功能的包

Flutter how to create package with function

我正在尝试打包。我需要使用异步功能,但在构建包时无法使用它。

包裹代码:

class Sozluk {
  wiki(ceviri) async {
    var res = await http.Client()
          .get(Uri.parse('https://sozluk.gov.tr/gts?ara=$ceviri'));
      var body = res.body;
      var decoded = jsonDecode(body);
      var json = decoded[0];
      var sozlukanlam = json["anlamlarListe"][0]["anlam"];
      print(sozlukanlam);
      return sozlukanlam;
  }
}

测试代码:

void main() {
  test('köpek', () {
    final sozluk = Sozluk();
    var cevap = sozluk.wiki('köpek');
    print(cevap);
  });
}

我得到的印刷品:

Instance of 'Future<dynamic>'

你的问题不清楚。

如果需要打印

sozlukanlam

测试函数中的 var 你需要等待你的 wiki 函数,因为它是异步的。

所以你可以这样做:

void main() {
  test('köpek', () async {
    final sozluk = Sozluk();
    var cevap = await sozluk.wiki('köpek');
    print(cevap);
  });
}

或者,如果测试函数无法异步运行

void main() {
  test('köpek', () {
    final sozluk = Sozluk();
    sozluk.wiki('köpek').then((sozlukanlam)=>print(cevap));
  });
}

您的代码遗漏了很多部分。仅仅因为 Dart 允许您像草率的 Web 开发人员一样编写代码,并不意味着您应该这样做。 Dart 是强类型的,这是一个优点,请使用它。

问题:

  • ceviri 没有明确的类型。
  • wiki 没有明确的 return 类型。
  • wiki 不是 awaited
  • 你的匿名方法不是async

有关 Futureasyncawait 的更多信息:

尽可能完善您的代码:

class Sozluk {
  Future<TYPE_X> wiki(TYPE_Y ceviri) async {
    var res = await http.Client()
          .get(Uri.parse('https://sozluk.gov.tr/gts?ara=$ceviri'));
      var body = res.body;
      var decoded = jsonDecode(body);
      var json = decoded[0];
      var sozlukanlam = json["anlamlarListe"][0]["anlam"];
      print(sozlukanlam);
      return sozlukanlam;
  }
}

测试代码:

void main() {
  test('köpek', () async {
    final sozluk = Sozluk();
    var cevap = await sozluk.wiki('köpek');
    print(cevap);
  });
}

请注意需要填写TYPE_X和TYPE_Y,我不知道哪种数据类型最能代表你的数据。是数字吗?文字?你来决定。