Flutter 卡片布局

问题描述

所以我是新手,我正在尝试制作一张卡片。但我似乎无法得到我想要的输出

我试图通过使用行和列来分隔不同的小部件,但我一直把它搞砸了。

这是我的目标输出 Target output 这是我目前的进度Current progress

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: buildhomePageAppBar(),body: buildExhibitorBody(),);
}

Widget buildExhibitorBody() {
return Container(
  child: SingleChildScrollView(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.start,children: [
        buildExhibitorText(),SizedBox(
          height: 10,),buildExhibitorCards(),SizedBox(height: 10),],);
 }

Widget buildhomePageAppBar() {
double profileDimension = 35;
return AppBar(
  backgroundColor: Colors.white,titleSpacing: 0,title: Padding(
    padding: EdgeInsets.only(
      left: 20,child: Row(
      children: [
        Padding(
          padding: EdgeInsets.only(
            top: 5,bottom: 5,child: Image(
            image: Assetimage('assets/images/plain_logo.png'),height: 30,SizedBox(width: 5),Text(
          'Virtex',style: TextStyle(
            color: Colors.black87,fontFamily: 'Poppins',fontSize: 16,fontWeight: FontWeight.bold,)
      ],actions: [
    Padding(
      padding: EdgeInsets.only(
        top: 10,bottom: 10,child: Container(
        height: profileDimension,width: profileDimension,alignment: Alignment.center,decoration: Boxdecoration(
          color: Colors.white,border: Border.all(
            color: Colors.black54,width: 2,borderRadius: BorderRadius.circular(50),child: ClipRRect(
          borderRadius: BorderRadius.circular(50),child: Image(
            width: profileDimension,height: profileDimension,image: Assetimage(
              'assets/images/profile-image.jpeg',fit: BoxFit.cover,SizedBox(width: 20),);
}

Widget buildExhibitorText() {
return Padding(
  padding: EdgeInsets.only(
    left: 20,right: 20,top: 20,child: Container(
    child: new Row(
      mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
        Expanded(
          child: Text(
            "Exhibitors",textAlign: TextAlign.justify,style: TextStyle(
              fontFamily: "DMSans",letterSpacing: -0.2,fontSize: 20.0,color: Colors.black,fontWeight: FontWeight.w400,);
 }

 Widget buildExhibitorCards() { // I think my problem is I don't kNow how to do the layout here
return Container(
  width: 400,height: 150,child: Column(children: <Widget>[
    Card(
      elevation: 1,child: Padding(
          padding: const EdgeInsets.only(),child: Row(children: [
            buildCardImage(),buildCardExhibitor(),buildCardindustry(),buildCardGo(),])),]),);
 }

 Widget buildCardExhibitor() {
 return Row(mainAxisAlignment: MainAxisAlignment.center,children: [
  Container(
    padding: EdgeInsets.all(10),width: 40,height: 40,child: Center(
      child: Row(
        children: <Widget>[
          Text(
            "EN",style: TextStyle(
              fontSize: 15.0,color: Colors.white,textAlign: TextAlign.center,Text('Exhibitor Name')
        ],decoration: Boxdecoration(
      borderRadius: BorderRadius.all(
        Radius.circular(200),color: Colors.red,]);
}

Widget buildCardImage() {
return Container(
  height: 100,width: 100,child: Image(
    image: Assetimage('assets/images/onboarding-2.jpg'),height: 100,);
}

 Widget buildCardindustry() {
return Padding(
  padding: EdgeInsets.only(
    left: 40,right: 40,children: <Widget>[
        Text(
          "Industry 1",style: TextStyle(
            fontFamily: "DMSans",color: Colors.grey,letterSpacing: 0.3,fontSize: 12,Text(
          "Industry 2",letterSpacing: -0.3,fontWeight: FontWeight.w500,);
  }

  Widget buildCardGo() {
 return Row(mainAxisAlignment: MainAxisAlignment.end,children: [
  Text(
    'Go to Booth',style: TextStyle(
      color: Colors.blue,IconButton(
    icon: Icon(
      MdiIcons.fromString('arrow-right'),size: 30,onpressed: () {
      Navigator.of(context).pop();
    },]);
}
}

我将不胜感激任何形式的帮助。

解决方法

IMAGE of card

我自己的代码

import 'package:flutter/material.dart';

class CardLayout extends StatelessWidget {
  Widget buildCardImage = Container(
    margin: EdgeInsets.only(right: 10.0),width: 150,height: 150,decoration: BoxDecoration(
      image: DecorationImage(
        fit: BoxFit.fill,image: NetworkImage("https://picsum.photos/250?image=9"),),);

  Widget buildCardExhibitor =
      Row(mainAxisAlignment: MainAxisAlignment.start,children: [
    Container(
      padding: EdgeInsets.all(10.0),decoration: BoxDecoration(
        borderRadius: BorderRadius.all(
          Radius.circular(200),color: Colors.red,child: Text(
        "EN",style: TextStyle(
          fontSize: 15.0,color: Colors.white,fontWeight: FontWeight.bold,textAlign: TextAlign.center,SizedBox(
      width: 10.0,Text(
      'Exhibitor Name',style: TextStyle(
        fontSize: 15.0,color: Colors.black,]);

  Widget buildCardIndustry = Padding(
    padding: EdgeInsets.all(8.0),child: Container(
      child: new Row(
        mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
          Container(
            padding:
                EdgeInsets.only(left: 10.0,right: 10.0,top: 5,bottom: 5),decoration: BoxDecoration(
              borderRadius: BorderRadius.all(
                Radius.circular(100),color: Colors.blueGrey.shade400,child: Text(
              'Industry 1',style: TextStyle(
                fontFamily: "DMSans",letterSpacing: 0.3,fontSize: 12,SizedBox(
            width: 10.0,Container(
            padding:
                EdgeInsets.only(left: 10.0,child: Text(
              'Industry 2',],);

  Widget buildCardGo = Row(mainAxisAlignment: MainAxisAlignment.end,children: [
    Text(
      'Go to Booth',style: TextStyle(
        color: Colors.blue,fontFamily: 'Poppins',fontSize: 16,SizedBox(width: 3),IconButton(
      icon: Icon(
        Icons.arrow_forward_rounded,size: 30,color: Colors.blue,onPressed: () {
        //Navigator.pop(context);
      },]);

  @override
  Widget build(BuildContext context) {
    return SafeArea(
        child: Scaffold(
      appBar: AppBar(
        title: Text('Exhibitor'),actions: [
          IconButton(
              icon: Icon(Icons.filter_list_rounded),onPressed: () {
                Navigator.pop(context);
              })
        ],body: Container(
        margin: EdgeInsets.only(top: 10.0),width: MediaQuery.of(context).size.width,//height: 150.0,// remove this line -------------- (1) [EDIT]
        child: Column(
          // wrap card with column and add listtile as children -------------- (2) [EDIT]
          children: [
            ListTile(
              leading: Text('Exhibitor'),trailing: IconButton(
                  icon: Icon(Icons.filter_list_rounded),onPressed: () {
                    Navigator.pop(context);
                  }),Card(
              elevation: 5.0,child: Padding(
                padding: EdgeInsets.all(5.0),child: Row(
                  children: <Widget>[
                    buildCardImage,Expanded(
                        child: Column(
                      children: <Widget>[
                        buildCardExhibitor,buildCardIndustry,buildCardGo
                      ],))
                  ],));
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...