当前位置: 首页 > 知识库问答 >
问题:

卡里面的卡

施晗日
2023-03-14

在Flutter中创建一个本地餐厅/酒吧/小酒馆的应用程序,我想在菜单中显示一张卡片,上面的所有其他卡片显示临时消息/交易。我的实现依赖于一个menu_screen和一个类似的“处理程序”(请注意,还没有完全开发)。

但有两个问题

  1. 它显示为卡中的卡
  2. 当信息只应在屏幕顶部显示一次时,却显示了两次

下面是它在测试设备上运行时的样子

menu_screen的Pastebin:在此处输入链接描述

//  sets up the menu screen for our program
 
//  imports
 
import 'package:flutter/material.dart';
import 'package:elehouseapp/handlers/food_menu_handler.dart';
 
//  set up class
class Menus extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        appBar: TabBar(
            labelColor: Colors.black,
            indicatorColor: Colors.black,
            tabs: <Widget>[
              Tab(
                text: 'Food',
              ),
              Tab(
                text: 'Drink',
              ),
            ]
        ),
        body: TabBarView(
          children: <Widget>[
            FoodHandler(),
            //Text("Food"),
            Text("Drink"),
          ],
        ),
      ),
    );
  }
}

food_menu_handler的Pastebin:在此处输入链接描述

import 'package:flutter/material.dart';

//  Generates an 2D array of food items and places elements into cards

//  Some data
final items = ['test','test2'];
final desc = ["Loreum Isplum","Other Test"];
final price = [2.20,20.00];

//  Handles array data and puts into cards
class FoodHandler extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: items.length,
        itemBuilder: (context, index){
          return Card(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
              Visibility(
                visible: true,
                child: Card(
                  child: ListTile(
                    title: Text("COVID-19"),
                    subtitle: Text("Menu restrictions are in place"),
                  ),
                )
                  ),
                ListTile(
                  title: Text(items[index]),
                  subtitle: Text(desc[index]+"\n£"+price[index].toString()),
                ),
                ButtonBar(
                    children: <Widget>[
                      FlatButton(
                        child: Text("Add to Basket"),
                        onPressed: null,
                      ),
                    ],
                  ),
              ],
            ),
          );
        }
    );
  }
}

编辑我已取消嵌套卡(如指出的)。希望这能解释我想要做的事情

共有1个答案

黄向明
2023-03-14

您可以在普通ListView中更改ListView.Builder,并使用列表中的条件和循环生成其子级列表,如下所示:

//  Generates an 2D array of food items and places elements into cards

//  Some data
final items = ['test', 'test2'];
final desc = ["Loreum Isplum", "Other Test"];
final price = [2.20, 20.00];

//  Handles array data and puts into cards
class FoodHandler extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        if (1 == 1) // TODO your condition here
          Card(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Card(
                  child: ListTile(
                    title: Text("COVID-19"),
                    subtitle: Text("Menu restrictions are in place"),
                  ),
                ),
              ],
            ),
          ),
        for (int index = 0; index < items.length; index++)
          Card(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                ListTile(
                  title: Text(items[index]),
                  subtitle: Text(desc[index] + "\n£" + price[index].toString()),
                ),
                ButtonBar(
                  children: <Widget>[
                    FlatButton(
                      child: Text("Add to Basket"),
                      onPressed: null,
                    ),
                  ],
                ),
              ],
            ),
          ),
      ],
    );
  }
}

我用一个TODO标记了你必须插入第一个“警报”条件的那一行。

另外,我建议您使用一个类来表示列表项,而不是使用三个不同的列表并将它们与索引“连接”起来,这是一种更方便,更优雅的解决方案

 类似资料:
  • 市场上最准确的卡路里计数器基于您的个人数据计算消耗的卡路里数: 体重、身高、年龄、性别 个人最大心率 (HRmax) 您的训练或活动的强度 个人最大摄氧量(VO2max) 卡路里计算基于加速度与心率数据的智能组合。卡路里计算用于准确测量您在训练中消耗的卡路里。 您可以在训练期间查看累计消耗的能量(单位:千卡 (kcal)),也可以在训练后查看消耗的总卡路里数。您还可追踪每日消耗的总卡路里数。

  • 市场上最准确的卡路里计数器基于您的个人数据计算消耗的卡路里数: 体重、身高、年龄、性别 个人最大心率 (HRmax) 您的训练或活动的强度 个人最大摄氧量(VO2max) 卡路里计算基于加速度与心率数据的智能组合。卡路里计算用于准确测量您在训练中消耗的卡路里。 您可以在训练期间查看累计消耗的能量(单位:千卡 (kcal)),也可以在训练后查看消耗的总卡路里数。您还可追踪每日消耗的总卡路里数。

  • 市场上可计算消耗的卡路里数的最准确的卡路里计数器,借助连续心率追踪甚至更为准确。能量消耗计算基于: 体重、身高、年龄、性别 个人最大心率 (HRmax) 训练期间以及连续心率追踪期间的心率 训练之外的活动测量与训练时无心率测试的活动测量 个人最大摄氧量 (VO2max) VO2max说明您的有氧健康情况。通过 Polar 体能测试,您能了解您的预估 VO2max。仅 Polar H7 和 H10

  • 市场上最准确的卡路里计数器基于您的个人数据计算消耗的卡路里数: 体重、身高、年龄、性别 个人最大心率 (HRmax) 您的训练或活动的强度 个人最大摄氧量(VO2max) 卡路里计算基于加速度与心率数据的智能组合。卡路里计算用于准确测量您在训练中消耗的卡路里。 您可以在训练期间查看累计消耗的能量(单位:千卡 (kcal)),也可以在训练后查看消耗的总卡路里数。您还可追踪每日消耗的总卡路里数。

  • 市场上可计算消耗的卡路里数的最准确的卡路里计数器。能量消耗的计算基于: 体重、身高、年龄、性别 个人最大心率 (HRmax) 训练时的心率 训练之外的活动测量与训练时无心率测试的活动测量 个人最大摄氧量 (VO2max) VO2max说明您的有氧健康情况。通过 Polar 有氧健康测试,您能了解您的预估 VO2max。 

  • 我在网上没有找到任何关于这个问题的信息...

  • 我正在尝试使用Spring和Spring Boot学习微服务,并学习部署到云平台。我计划创建一个Angular 2前端应用程序,它与我部署的微服务进行通信。现在,我正在浏览Spring cloud services Eureka、Zuul、Recural breakers等。 null

  • 我正在尝试向尤里卡服务器注册我的微服务。但它显示浏览器中没有可用的实例。我在控制台中没有收到任何错误。请帮助我解决这个问题。 我已经通过在谷歌上搜索尝试了多个选项。不过,我无法解决此问题。 微服务应用程序.属性 客户端主类 Eureka服务器application.properties 尤里卡服务器主类。