草庐IT

flutter - 如何构建类的对象以在 ListView.builder 中使用?

coder 2023-07-23 原文

我做了一类汽车(有多个字符串,例如价格和品牌等),我正在尝试构建它的列表,以便在 ListView 中构建卡片时可以使用它,但屏幕上没有显示任何内容当我运行代码时。 我收到一条错误消息,指出垂直视口(viewport)的高度没有限制,我的应用程序没有显示任何卡片(尽管它确实在屏幕上显示了其他任何内容)

我的类(class):-

class cars {
  String brand, type, model, color, price, pic;

  cars(String b, String t, String m, String c, String p1, String p2) {
    brand = b;
    type = t;
    model = m;
    color = c;
    price = p1;
    pic = p2;
  }
}

(页面类)

class CHomePage extends State<CHP> {
  int i = 0;
  String price;
  int selected = 0;
  List<String> prices = ["Any", "<= 1200", "<= 1600", "<= 1800", "<= 2000"];
  List<cars> myCars = new List();

  void carsBuilder() {
    cars c = new cars(
        "Chevorlet", "Corvette Stingray", "2019", "Turqoise", "\$2100",
        "assets/Images/corvette.jpg");
    myCars.add(c);
    c = new cars("Chevorlet", "Impala", "1967", "Black", "\$1900",
        "assets/Images/impala.jpg");
    myCars.add(c);
    c = new cars(
        "Dodge", "Challenger SRT Hellcat", "1967", "Dark Red", "\$2000",
        "assets/Images/challenger.jpg");
    myCars.add(c);
  }
  Widget buildPicker() {
    return CupertinoPicker(
        itemExtent: 50,
        backgroundColor: CupertinoColors.white,
        onSelectedItemChanged: (index) {
          setState(() {
            selected = index;
          });
        },
        children: List<Widget>.generate(
          prices.length,
          (index) {
            return Center(
              child: Text(
                prices[index],
                style: TextStyle(fontSize: 18, color: Color(0xff469ABF)),
              ),
            );
          },
        ));
  }
  void incrementTab(index) {
    setState(() {
      i = index;

      if (i == 1) {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => CAP()),
        );
      } else if (i == 2) {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => LP()),
        );
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: CupertinoNavigationBar(
        middle: Text(
          'Home Page',
          style: TextStyle(color: Color(0xff469ABF)),
        ),
      ),
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            new Padding(
              padding: EdgeInsets.all(20),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  new Text(
                    "Choose Price Range:   ",
                    style: TextStyle(fontSize: 18, color: Color(0xff469ABF)),
                  ),
                  new CupertinoButton(
                    onPressed: () async {
                      await showModalBottomSheet<int>(
                        context: context,
                        builder: (BuildContext context) {
                          return buildPicker();
                        },
                      );
                    },
                    child: Text(prices[selected]),
                  ),
                ],
              ),
            ),
            new ListView.builder(
              itemCount: myCars.length,
              itemBuilder: (context, index) {
                return Card(
                  child: Column(
                    children: <Widget>[
                      new ListTile(
                        leading: Icon(Icons.directions_car),
                        title: Text(myCars[index].type),
                        subtitle: Text(myCars[index].price),
                      ),
                      new ButtonTheme.bar(
                        child: ButtonBar(
                          children: <Widget>[
                            new CupertinoButton(
                              child: Text("View More Details"),
                              onPressed: () {},
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                );
              },
            ),
          ],
        ),
      ),
      bottomNavigationBar: new Theme(
        data: Theme.of(context).copyWith(
            primaryColor: Colors.lightBlue,
            textTheme: Theme.of(context)
                .textTheme
                .copyWith(caption: new TextStyle(color: Colors.black))),
        child: new BottomNavigationBar(
          items: [
            BottomNavigationBarItem(
              title: new Text('Home'),
              icon: Icon(Icons.home),
            ),
            BottomNavigationBarItem(
              title: new Text('Account'),
              icon: Icon(Icons.person),
            ),
            BottomNavigationBarItem(
              title: new Text('Logout'),
              icon: Icon(Icons.directions_run),
            ),
          ],
          currentIndex: i,
          onTap: (index) {
            incrementTab(index);
          },
        ),
      ),
    );
  }
}

最佳答案

更新:- 我将这两行添加到我的 ListView.builder:-

scrollDirection: Axis.vertical,
shrinkWrap: true,

并将父列放在 ListView 中,并使构建器成为它的子项而不是列的子项。 我的项目显示并且我只能在我按下特定位置时滚动..除此之外它不会滚动..

https://gyazo.com/f221fe659df002032ef7b56af5da4a56

关于flutter - 如何构建类的对象以在 ListView.builder 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57031586/

有关flutter - 如何构建类的对象以在 ListView.builder 中使用?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  4. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  5. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  6. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  10. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

随机推荐