草庐IT

android - Flutter - 如何解决 iOS 和 Android 之间的差异?

coder 2023-07-23 原文

我正在学习 Flutter,所以我正在做一些测试。在我上一个测试应用程序中,我实现了一个带有图标的 ExpansionPanel。这些图标在 iOS 上显示,但在 Android 上不显示。知道为什么以及如何解决这个问题吗?

    new Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
            Column(
                children: <Widget>[
                    Icon(Icons.time_to_leave, size: _iconSize, color: _iconColor),
                    Padding(padding: EdgeInsets.only(top: _textPadding)),
                    Text("Car", style: new TextStyle(fontSize: _fontSize))
                ],
            ),

        ],
    ),

first屏幕截图来自 iOS 模拟器(预期结果)和 second一个来自 Android 模拟器(错误的那个)。构建应用程序时结果相同。

按照要求编辑完整代码(我删除了不会改变问题的无用部分:

import 'package:flutter/material.dart';


class Criterias extends StatefulWidget {
  CriteriaState createState() => new CriteriaState();
}

class NewItem {
  bool isExpanded;
  final String header;
  final Widget body;
  final Icon iconpic;
  NewItem(this.isExpanded, this.header, this.body, this.iconpic);
}

double discretevalue = 2.0;
double hospitaldiscretevalue = 25.0;

class CriteriaState extends State<Criterias> {

  bool firstStart = true;
  List<NewItem> items;
  final double _textPadding = 4;
  final double _fontSize = 20;
  final double _panelPadding = 15.0;
  int _bottomNavigationBarIndex = 0;
  static bool _defaultExpanded = true;
  bool _expandOrCollapse = _defaultExpanded;
  Color _iconColor = Colors.lightBlue;

  void _expandCollapse () {
    setState(() {
      _expandOrCollapse = !_expandOrCollapse;
      for (var item in items) {
        item.isExpanded = _expandOrCollapse;
      }
    });
  }

  void onTabTaped(int index) {
    setState(() {
      print(index);
      _bottomNavigationBarIndex = index;
    });
  }

  ListView List_Criteria;
  Widget build(BuildContext context) {
    if (firstStart) {
      firstStart = false;
      double _iconSize = MediaQuery.of(context).size.width / 6;
      items = <NewItem>[
        new NewItem(
            _defaultExpanded,
            'Travel',
            new Padding(
                padding: new EdgeInsets.all(_panelPadding),
                child: Column(
                  children: <Widget>[
                    new Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
                        Column(
                          children: <Widget>[
                            Icon(Icons.time_to_leave, size: _iconSize, color: _iconColor),
                            Padding(padding: EdgeInsets.only(top: _textPadding)),
                            Text("Car", style: new TextStyle(fontSize: _fontSize))
                          ],
                        ),
                      ]
                    ),

                    new Padding(padding: EdgeInsets.only(top: 20)),

                    new Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
                        Column(
                          children: <Widget>[
                            Icon(Icons.timeline, size: _iconSize, color: _iconColor),
                            Padding(padding: EdgeInsets.only(top: _textPadding)),
                            Text("Path", style: new TextStyle(fontSize: _fontSize))
                          ],
                        ),
                      ]
                    ),
                  ],
                )
                  ),
            new Icon(Icons.time_to_leave),
        ),
      ];
    }

    List_Criteria = new ListView(
      children: [
        Padding(
          padding: EdgeInsets.symmetric(vertical: 10),
          child: 
            Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: <Widget>[
                InkWell(
                  onTap: () => _expandCollapse(),
                  child: Text(_expandOrCollapse ? "Collapse All" : "Expand All", style: new TextStyle(color: Colors.lightBlue, fontSize: 15)),
                ),
                SizedBox(width: 10),
              ],
            ),
        ),

        new Padding(
          padding: new EdgeInsets.all(0.0),
          child: new ExpansionPanelList(
            expansionCallback: (int index, bool isExpanded) {
              setState(() {
                items[index].isExpanded = !items[index].isExpanded;
              });
            },
            children: items.map((NewItem item) {
              return new ExpansionPanel(
                headerBuilder: (BuildContext context, bool isExpanded) {
                  return new ListTile(
                      leading: item.iconpic,
                      title: new Text(
                        item.header,
                        textAlign: TextAlign.left,
                        style: new TextStyle(
                          fontSize: 20.0,
                          fontWeight: FontWeight.w400,
                        ),
                      ));
                },
                isExpanded: item.isExpanded,
                body: item.body,
              );
            }).toList(),
          ),
        )
      ],
    );

    Scaffold scaffold = new Scaffold(
      appBar: new AppBar(
        title: new Text("Application"),
      ),
      body: _bottomNavigationBarIndex == 0 ? List_Criteria : Container(
        child:
          Column(
            children: <Widget>[
              Padding(
                padding: EdgeInsets.only(top: 8, left: 8),
                child: 
                  Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: <Widget>[
                      //CloseButton()
                      Icon(Icons.close, size: 30)
                    ],
                  ),
              ),

              Divider(
                color: Colors.black,
              ),

              Container(),
            ],
          )
      ),
      bottomNavigationBar: 
      BottomNavigationBar(
        onTap: onTabTaped,
        currentIndex: _bottomNavigationBarIndex,
        type: BottomNavigationBarType.fixed,
        items:<BottomNavigationBarItem>[
      BottomNavigationBarItem(icon: Icon(Icons.attach_money), title: Text("Payment")),
      BottomNavigationBarItem(icon: Icon(Icons.attach_money), title: Text("Payment")),
    ]
      ),
    );
    return scaffold;
  }
}


void main() {
  runApp(
    MaterialApp(home:Criterias()));
}

最佳答案

好的,在 Flutter Bug Tracker 中挖掘后,似乎在使用大字符/图标时 Flutter 中存在错误。这些图标会随机出现在某些设备上,而不会出现在其他设备上。

关于android - Flutter - 如何解决 iOS 和 Android 之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54735555/

有关android - Flutter - 如何解决 iOS 和 Android 之间的差异?的更多相关文章

  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. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

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

  4. 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

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  8. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐