我是Flutter的新手,我想在我的ListView.builder中添加命令
。 Widget orderListView() {
return ListView.builder(
itemBuilder。(context, getOrders) => Card(
child: ListTile(
標題。Text(getOrders.toString())。
onTap: () => print('$getOrders')。
),
));
}
基本上,我需要我的串列視圖顯示我的訂單串列
Future<String> getOrders() async {
return await {
淘寶網
.post(
Uri.parse('https://somerandomurl.com/admin/get_orders') 。
尸體。"{"token": "admin_token"}"。
headers: headers)
.then((response) {
print('回應狀態。${response.statusCode}')。)
print('Response body: ${response.body}')。)
// return response.body;.
}).catchError((error) {
print("錯誤。$error")。)
// return error;.
});
}
這里是我的getOrders命令。是否有可能獲得我的訂單串列并在我打開我的串列視圖螢屏時顯示它?
uj5u.com熱心網友回復:
我不太清楚你卡在什么地方,但你的代碼有幾個突出的問題,你希望它是怎樣的,然而這是有可能的,但你的方法不正確。首先,getOrders()方法需要是List<String>型別,因為它是一個訂單的串列。
因此,將其更新為如下內容:
Future<List<String>> getOrders() async {
var orders = await http
.post(
Uri.parse('https://somerandomurl.com/admin/get_orders') 。
尸體。"{"token": "admin_token"}"。
headers: headers)
.then((response) {
print('回應狀態。${response.statusCode}')。)
print('Response body: ${response.body}')。)
// return response.body;.
}).catchError((error) {
print("錯誤。$error")。)
// return error;.
});
return訂單。
所以現在你的方法回傳一個串列而不是一個單一的值,你可以更新你的串列視圖方法,如下所示:
Widget orderListView(List<String> orders) {
return ListView.builder(
itemCount: orders.length, //你需要這個,否則會出錯。
itemBuilder。(context, index) {
//你也可以不說orders[index],而是這樣做:.
var item = orders[index] 。
//你不應該同時使用`Card`和`ListTile`,選擇
//一個。
return ListTile(
標題。Text(orders[index].toString())。
onTap: () => print(orders[index])。
),
}
);
}
然而這還不夠。因為這是一個Future,你必須在某個地方呼叫它以回傳資料。有許多偉大的包可以幫助使這個程序變得更容易,但這里是你如何做的:
因此,無論這個螢屏是什么樣子的,你都必須呼叫它來回傳資料。
因此,無論你的這個螢屏被稱為什么,請確保它是一個有狀態的 widget。更新其余的方法,并加入一個FutureBuilder:
因此,無論你的這個螢屏被稱為什么,請確保它是一個有狀態的部件。
import 'package:flutter/material.dart'。
class MyOrdersWidget extends StatefulWidget{
const MyOrdersWidget({ Key? key }) : super(key: key)。
@override
_MyOrdersWidgetState createState() => _MyOrdersWidgetState()。
}
class _MyOrdersWidgetState extends State< MyOrdersWidget> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: _body(),
);
}
小工具 _body() {
return FutureBuilder<List<String>> (
future: getOrders(),
初始資料。const [],
構建者。(context, snapshot) {
if(snapshot.data == null) return Text('Loading')。
if(snapshot.error == null) return Text('Error')。
if(snapshot.data!.length == 0) return Text('No Orders')。
return orderListView(snapshot.data)。
},
);
}
}
就像我之前說的,因為你是flutter的新手,我強烈建議使用一個包來協助你進行這種開發。對于http請求,請使用Dio包,對于管理期貨,FutureBuilder也可以,但我個人喜歡使用flutter_riverpod,這里有一個關于它的視頻
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315701.html
標籤:
