草庐IT

网易云UI模仿-->侧边栏

我爱迪迪 2023-03-28 原文

侧边栏

效果图

界面分解

可以看到从上到下的流式布局。需要一个Column来容纳,并且在往上滑动的过程中顶部的个人信息是不会动的。所以接下来需要将剩余部分占满使用Flexibel组件。

实现

个人信息


从左到右的布局,最外面使用一个Container包裹

Container(
  //外间距,不添加会紧挨着顶部
  padding: EdgeInsets.fromLTRB(20.w, 40.h, 20.w, 0),
  //行布局
  child: Row(
    children: [
      //头像,这里使用图标替代,自行更换
      Icon(Icons.pages),
      //呢称
      Text("烟霞生水云"),
      //呢称后面的箭头图标
      Icon(
        Icons.arrow_forward_ios_outlined,
        //设置图标的大小
        size: 16,
      ),
      //占位组件,不赋予子组件就只能占位
      SizedBox(
        width: 110.w,
      ),
      //最后的扫描图标,这里是自定义的,个人可将其修改为官方自带图标
      Icon(Iconfont.saoyisao)
    ],
  ),
)

会员卡片



总体为列,但是列里面又嵌套着行。其中会员中心按钮和会员专享用了自定义组件。

Container(
  //设置外边界
  padding: EdgeInsets.all(15.w),
  //容器装饰器
  decoration: BoxDecoration(
    //设置背景色,当BoxDecoration中有color属性时,
    //Container中就不能定义该属性,否则报错。
    color: AppColors.heijiao,
    //设置圆角
    borderRadius: BorderRadius.all(Radius.circular(10.h)),
  ),
  //总体为列布局
  child: Column(
    //列布局对齐方式,在从轴的开始处对齐
    //列布局的主轴方向为从上到下,从轴方向为从左到右。
    //行布局的主轴方向为从左到右,从轴方向为从上到下。
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      //行布局
      Row(
        //行中子组件
        children: [
          Text(
            '续费黑胶VIP',
            //Text样式
            style: TextStyle(
              //颜色
              color: AppColors.secondaryElement,
              //字重,此处为加粗
              fontWeight: FontWeight.bold,
            ),
          ),
          //占位组件
          SizedBox(
            //只指定了宽度
            width: 60.w,
          ),
          //自定义的圆弧框线按钮,一个需要显示的字符串和一个动作方法
          btnTextButtonWidget(
            buttonText: "会员中心",
            onPressed: () {},
          ),
        ],
      ),
      Text(
        "开启会员成长之旅",
        //Text样式
        style: TextStyle(
          //颜色
          color: AppColors.secondaryElement,
          //字号
          fontSize: 12,
        ),
      ),
      //分割线
      Divider(
        //分割线颜色
        color: AppColors.secondaryElement,
      ),
      //行布局
      Row(
        //子组件
        children: [
          Text(
            "受邀专享",
            style: TextStyle(
              color: AppColors.thirdElementText,
              fontSize: 12,
            ),
          ),
          SizedBox(
            width: 140.w,
          ),
          //自定义的章印传入两行文字。
          textTagOne(one: '受邀', two: '专享')
        ],
      )
    ],
  ),
)

自定义圆弧框线按钮

///带边框圆角按钮,取消高度受限
Widget btnTextButtonWidget({
  //必须要的参数,使用required修饰
  required VoidCallback onPressed,
  double width = 60,
  double height = 20,
  required String buttonText,
}) {
  //返回的组件
  return Container(
    width: width.w,
    height: height.h,
    //容器装饰属性
    decoration: BoxDecoration(
      //边框圆角
      borderRadius: BorderRadius.all(Radius.circular(15.h)),
      //框线,框线颜色,还可以设置粗细
      border: Border.all(color: AppColors.primaryBackground),
    ),
    //文本按钮
    child: TextButton(
      //按钮样式
      style: ButtonStyle(
        //取消高度限制,不取消,按钮固定高度,UI达不到预期
        visualDensity: VisualDensity.compact,
      ),
      child: Text(
        //传入的字符串参数
        buttonText,
        //字体样式
        style: TextStyle(color: AppColors.secondaryElement, fontSize: 10),
      ),
      //传入的点击事件方法
      onPressed: onPressed,
    ),
  );
}

自定义小章印


///红色章印

Widget textTagOne(
    {
    //第一行文本
    required String one,
    //第二行文本
    required String two,
    //宽高
    double hw = 25}) {
  return Container(
    //方形,宽高一致
    height: hw.h,
    width: hw.h,
    //容器装饰属性
    decoration: BoxDecoration(
      //背景颜色
      color: AppColors.tagText,
      //圆角弧度
      borderRadius: BorderRadius.all(Radius.circular(5.h)),
    ),
    //子组件列布局
    child: Column(
      children: [
        //第一行文本
        Text(
          //传入的第一行文本参数
          one,
          //Text组件样式
          style: TextStyle(
            //字体大小,字号
            fontSize: 9,
            //字体粗细,字重,文字加粗
            fontWeight: FontWeight.bold,
            //字体颜色
            color: AppColors.primaryBackground,
          ),
        ),
        //第二行文本同上
        Text(
          two,
          style: TextStyle(
              fontSize: 9,
              fontWeight: FontWeight.bold,
              color: AppColors.primaryBackground),
        ),
      ],
    ),
  );
}

未完待续...

有关网易云UI模仿-->侧边栏的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. 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代码修改为

  3. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  4. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  5. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  6. ruby-on-rails - 找不到 gem railties (>= 0.a) (Gem::GemNotFoundException) - 2

    我已经看到了一些其他的问题,尝试了他们的建议,但没有一个对我有用。我已经使用Rails大约一年了,刚刚开始一个新的Rails项目,突然遇到了问题。我卸载并尝试重新安装所有Ruby和Rails。Ruby很好,但Rails不行。当我输入railss时,我得到了can'tfindgemrailties。我当前的Ruby版本是ruby2.2.2p95(2015-04-13修订版50295)[x86_64-darwin15],尽管我一直在尝试通过rbenv设置ruby​​2.3.0。如果我尝试rails-v查看我正在运行的版本,我会得到同样的错误。我使用的是MacOSXElCapitan版本10

  7. ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe? - 2

    考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://

  8. Ruby -> 写入二维数组 - 2

    我正在处理http://prepwork.appacademy.io/mini-curriculum/array/中概述的数组问题我正在尝试创建函数my_transpose,它接受一个矩阵并返回其转置。我对写入二维数组感到很困惑!这是一个代码片段,突出了我的困惑。rows=[[0,1,2],[3,4,5],[6,7,8]]columns=Array.new(3,Array.new(3))putscolumns.to_s#Outputisa3x3arrayfilledwithnilcolumns[0][0]=0putscolumns.to_s#Outputis[[0,nil,nil],[

  9. ruby - 为什么必须明确指定 2 个参数才能 curry :> - 2

    考虑这个,它工作正常::>.to_proc.curry(2)[9][8]#=>true,because9>8然而,即使>是一个二元运算符,如果没有指定的元数,上面的代码将无法工作::>.to_proc.curry[9][8]#=>ArgumentError:wrongnumberofarguments(0for1)为什么两者不等价?注意:我特别想用提供的一个参数创建中间柯里化(Currying)函数,然后然后调用然后用第二个参数调用它。 最佳答案 curry必须知道传入的过程的数量,对吧?:-1来自arity的负值令人困惑,但基本上

  10. ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列? - 2

    在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para

随机推荐