- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个连接并向 HTTP 服务器发送请求的应用程序,当获得响应时将它们解析为 JSON 对象并显示输出。当我使用以下方法时出现问题:
Future<List<Widget>> getPizzas() async {
List<Widget> pizzasElements;
await PizzeriaAPI().getMenu().then((response) {
Iterable list = json.decode(response.body);
var pizzas = list.map((model) => Pizza.fromJson(model)).toList();
pizzasElements =new List<Widget>.generate(pizzas.length, (int index){
Row row = new Row();
row.children.add(new Text(pizzas[index].name));
row.children.add(new Text("${pizzas[index].price} \$"));
row.children.add(new MaterialButton(color: Colors.green,child: Text("Add"),onPressed: (){
// esegui il post
}));
return row;
});
});
}
这是构建方法:
@override
Widget build(BuildContext context) {
getPizzas().then((List<Widget> response){
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
brightness: Brightness.dark,
),
home: DefaultTabController(length: 4, child: Scaffold(
appBar: AppBar(
title: const Text('Pizzeria'),
bottom: TabBar(
isScrollable: true,
tabs: [
Tab(text: "Buy"),
Tab(text: "Orders"),
Tab(icon: Icon(Icons.shopping_cart)),
Tab(icon: Icon(Icons.settings))
]
),
),
body: TabBarView(children: [
Column(
children: response,
),
Column(
children: <Widget>[
Row(
children: <Widget>[
Text("Orders")
],
)
],
),
Column(
children: <Widget>[
Row(
children: <Widget>[
Icon(Icons.shopping_cart)
],
)
],
),
Column(
children: <Widget>[
Row(
children: <Widget>[
Icon(Icons.settings)
],
)
],
)
]),
)
)
);
}
);
}
}
我获得的是 Future 对象而不是 List 对象。
用于显示元素的代码是:
Column(
children: response,
),
如何从该方法获取List并显示输出?
最佳答案
问题是 getPizzas()
是异步的,这意味着它返回一个 Future
。您的要求本质上意味着您应该将渲染代码更改为:
Column(
children: pizzasElements,
),
因为您似乎正在设置 pizzaElements
以包含您的小部件列表。
您需要做的是将构建方法与请求分开。因此,在您的构建函数中,只需调用 getPizzas()
函数即可。像这样:
Widget build(BuildContext context) {
getPizzas();
return MaterialApp(...
接下来,您需要确保 pizzaElements
已初始化并且是类属性而不是局部变量。所以这意味着您需要使用 StatefulWidget
并且这将发生在 State 类中。
List<Widget> pizzaElements = <Widget>[];
然后在 getPizzas()
中,您需要确保调用 setState
以便让您的小部件与列表一起重新呈现:
void getPizzas() {
PizzeriaAPI().getMenu().then((response) {
Iterable list = json.decode(response.body);
var pizzas = list.map((model) => Pizza.fromJson(model)).toList();
setState(() {
pizzasElements = new List<Widget>.generate(pizzas.length, (int index) {
Row row = new Row();
row.children.add(new Text(pizzas[index].name));
row.children.add(new Text("${pizzas[index].price} \$"));
row.children.add(new MaterialButton(
color: Colors.green,
child: Text("Add"),
onPressed: () {
// esegui il post
}));
return row;
});
});
});
}
关于android - 如何以编程方式将列表小部件添加到 TabBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733226/
我想将照片数据从 Tabbarcontroller 中的一个 Viewcontroller(cameraVC) 传递到同一 Tabbarcontroller 中的另一个 Viewcontroller(
我需要加载选项卡栏项目。在这里,我需要不同标签中标签栏的不同背景颜色。我正在更改 didSelectItem 中的栏色调颜色。但它的背景颜色没有改变。加载标签栏时它工作正常。 这是我的代码 over
我想获取标签栏默认大小,但我在ViewController中没有任何tabBar,所以我没有使用self.tabBarController?.tabBar.frame.size.height . 我使
我有一个应用程序的想法,但在使用 Xcode 几个月后,我遇到了一个主要的设计问题。我想要这个: 但正如许多 ios 开发人员所知,在界面构建器中使用传统的标签栏只会创建单色、非轮廓、标签栏按钮,如下
我在我的应用程序上使用 TabBarController,在其中一个主视图 (aViewController) 中,我按下另一个 Controller (bViewController),并使用 se
我想在用户点击选项卡时切换选定的选项卡。假设我有两个选项卡并且显示第一个选项卡,那么点击第一个选项卡(以及点击第二个选项卡)应该会引导我进入第二个选项卡。我已经实现了一个自定义 UITabBarCon
我有一个带有 3 个选项卡的选项卡栏 Controller ,每个选项卡都有导航 Controller ,在每个导航 Controller 的 Root View Controller 上我想要选项卡
我正在编写一个 iPhone 应用程序,它类似于 5-6 级向下钻取应用程序。我几乎完成了我的应用程序的编写,现在提出了一个新要求,即从第三个屏幕开始添加一个 TabBar(JQuery 中的导航栏)
我正在使用 SWRevealViewController 作为侧边菜单。我的应用程序中还有一个标签栏 Controller 作为主视图。 在我的菜单中,我有“MenuItem”(显示MenuItemV
我正在通过 Storyboard 创建一个 TabBar Controller 应用程序。我正在使用 Storyboard 引用对象来链接第三个选项卡项的另一个 Storyboard 。它工作正常,但
TabBar 没有隐藏在推送的 ViewController 中,我使用下面的代码来隐藏 tabBar, tabBarController?.tabBar.isHidden = true
我目前有两个 View Controller ,一个是使用 imagePicker 拍照的 CameraViewController,另一个是显示一个人收到的所有照片消息的 PhotoInboxVie
我有一个包含 5 个项目的 UITabBarController。在其中一个 ViewController 上,我有一个按钮,我将其称为“开始”,所以当我按下开始时,我想插入另一个 ViewContr
我正在更改 setSelectionIndicatorImage,当我在 iOS 8 上运行应用程序时,我得到图像和 tabBar 的常规宽度之间的间距。有没有一种方法可以使标签栏的高度与 setSe
我想通过在图像上向左滑动从“正在显示”导航到“即将推出”,此外,我希望 Appbar 在我滑动时不要移动,但我认为只有标签栏和我不确定,如果您知道如何实现这一点,请提供一些建议 enter image
在我的项目中,我有一个 UITabBarController。在其中一个 ViewControllers 上我有一个按钮。当我单击此按钮时,一个新的 ViewController 将以模态方式呈现。
我是 iPhone 开发新手,多个 View (xib 或 nib)真的让我感到困惑。这就是我想要实现的目标...... 使用 TabBarControllerAppDelegate 有 5 个不同的
滚动到底部后如何修复 iOS 15 标签栏透明: 最佳答案 在 iOS 15 中,Apple 添加了 scrollEdgeAppearance用于在边缘滚动时配置标签栏外观的属性。 https://d
我尝试创建如下图所示的自定义标签栏: 下面是我得到的结果: 以下是我当前的代码: class CustomTabBarController: UITabBarController { over
Widget build(BuildContext context) { return Scaffold( body: SingleChildScrollView( child: Colu
我是一名优秀的程序员,十分优秀!