flutter - Flutter FutureBuilder 和 ListTile 创建
问题描述
我已经写了下面的代码。它的作用是使用 REST API 连接到服务器并下订单。作为回报,我得到以下 JSON 响应:
{"status": "DONE", "response": {"message": "Your order saved.", "uuid": "fc1d6f52-9aef-11e3-84ae-0015af9e1aa1"}}
每次我按下“Raised Button”时,它都会连接到服务器并创建一个新订单,并每次都为我提供一个新的订单 UUID,并显示在 Text Widget 中。我想要实现的是调用 FutureBuilder 或 ListViewBuilder,这样每次我按下“Raised Button”时,都会触发构建器并且 ListTile(或容器)会出现包含新订单 UUID。
例如,如果我按“Raised Button” 4 次,我希望我的 UI 显示 4 个 ListTile(或 Container),每个都有唯一的订单 UUID。我试图寻找解决方案,但没有走运。我是 Flutter 的新手,我刚开始学习它。
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'model/orderTaxi_model.dart';
import 'package:http/http.dart' as http;
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
Future<OrderTaxi> _createOrder(String phone) async {
final http.Response response = await http.post(
'http://XXXXXXXXXXXXX/api/order',
headers: <String, String>{
},
body: <String, String>{
'api_key': 'XXXXXXXXXXXXXXXXXX',
'phone': phone,
'street': 'Testttt',
'moderation_required': 'yes',
},
);
if (response.statusCode == 200) {
final Map responseString = jsonDecode(response.body);
print(responseString);
return OrderTaxi.fromJson(responseString);
} else {
throw Exception('Failed to create order');
}
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController _controller = TextEditingController();
OrderTaxi _futureOrder;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Post Request'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
controller: _controller,
),
RaisedButton(
child: Text('Place Order'),
onPressed: () async {
final String phone = _controller.text;
OrderTaxi response = await _createOrder(phone);
setState(() {
_futureOrder = response;
});
},
),
_futureOrder == null? Container(): Text('${_futureOrder.uuid}'),
],
)
);
}
}
解决方案
推荐阅读
- java - 在 java Mockito 中模拟 httpclient v4
- python-3.x - 如何使 tkinter::pack() 将标签放在下面程序的左上角?
- css - CSS 内容属性中的 SVG 精灵
- javascript - React useState 无法更新双向绑定
- android - 如何禁用片段的过渡?
- python - 通过创建处理程序类避免重复代码
- haskell - 是否可以在 Haskell 中否定类型参数约束?
- r - r 在 ggplot2 中放大尺寸时错误地显示形状文件
- for-loop - 嵌套的 For 循环仅在批处理文件中运行外循环
- go - 从包函数中返回一个 Mock