我試圖翻譯一個字串并將其顯示在我的螢屏上但是當我嘗試檢查列印上的文本時它說Instance of Future<Translation>
這是我嘗試使用 then(print) 時的代碼
final finalLastSeen = translator
.translate(timeago.format(userLastSeen), from: 'en', to: 'id')
.then(print);
它顯示了我想要的字串。但是當我做這個時
final finalLastSeen = translator.translate(timeago.format(userLastSeen),
from: 'en', to: 'id');
print(finalLastSeen);
它將顯示未來錯誤
這是我的整個 FutureBuilder 代碼
return FutureBuilder(
future: users.doc(product.userId).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return const Text("Something went wrong");
}
if (snapshot.hasData && !snapshot.data!.exists) {
return const Text("Document does not exist");
}
if (snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> data =
snapshot.data!.data() as Map<String, dynamic>;
_sellerImageurl = '${data['imageUrl']}';
_sellerName = '${data['name']}';
_sellerJoinedDate = '${data['createdAt']}';
_sellerCity = '${data['location']}';
_sellerStatus = '${data['status']}';
_sellerLastSeen = '${data['lastSeen']}';
}
final DateTime lastSeen = DateTime.parse(_sellerLastSeen);
final Duration _sellerTimePassed = time.difference(lastSeen);
final userLastSeen = DateTime.now().subtract(_sellerTimePassed);
final _userOffline = '';
print(timeago.format(userLastSeen));
final finalLastSeen = await translator.translate(timeago.format(userLastSeen),
from: 'en', to: 'id');
print(finalLastSeen);
return product_details_layout(
cartProvider: cartProvider,
product: product,
productId: productId,
wishListProvider: wishListProvider,
sellerImageurl: _sellerImageurl,
sellerName: _sellerName,
sellerCity: _sellerCity,
sellerStatus: _sellerStatus,
userOffline: _userOffline,
productList: productList,
sellerJoinedDate: _sellerJoinedDate,
);
},
);
``
uj5u.com熱心網友回復:
translate 是一個異步函式。
then正在等待翻譯功能完成并回傳您的Translation.
在第二種情況下,你沒有then,所以你沒有等待它完成,你只有一個Future<Translation.
你可以這樣做:
final finalLastSeen = await translator.translate(timeago.format(userLastSeen),
from: 'en', to: 'id');
print(finalLastSeen);
這await將確保您在呼叫 print 之前等待功能完成。
uj5u.com熱心網友回復:
你應該照顧好async/await。請看這里。如果您像Instance of Future<anything>這樣列印,則意味著您無需等待異步完成。您的代碼應如下所示。
/// for printing promise result
translator.translate(timeago.format(userLastSeen), from: 'en', to: 'id')
.then(print);
/// or by await
final finalLastSeen = await translator
.translate(timeago.format(userLastSeen), from: 'en', to: 'id');
print(finalLastSeen);
/// inside widget you can use FutureBuilder
widget(
child: FutureBuilder(
future: translator.translate(timeago.format(userLastSeen), from: 'en', to: 'id'),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) => snapshot.hasData ? Text(snapshot.data):Text("Waiting...")
)
)
uj5u.com熱心網友回復:
您可以從Translator package 示例中看到一些示例。
因此,如果您想將字串作為結果,請使用asyncmethode 并將await關鍵字放在 before translator.translate:
void myMethod() async {
final finalLastSeen = await translator.translate(timeago.format(userLastSeen), from: 'en', to: 'id');
print(finalLastSeen);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449680.html
上一篇:引數型別“voidFunction(Hospital)”不能分配給引數型別“voidFunction(Object?)?”。顫振下拉
