【问题标题】:Flutter Flexible in CardFlutter 灵活卡
【发布时间】:2021-10-30 19:29:25
【问题描述】:

我在卡片中使用灵活小部件时遇到问题。我使用了约束框,但我想使用不设置宽度的小部件。但是如果我使用灵活的小部件,卡片就不会再出现了。 我的目标是让文本使用所有可用空间而不设置恒定宽度 这是我的代码:

    import 'package:flutter/material.dart';
    import 'package:flutter/widgets.dart';
    import 'package:wemaind_mobile_app/pages/tasks/tasks_page.dart';
    import 'package:wemaind_mobile_app/theme/colors.dart';
    import 'board_entity.dart';
    import 'task_counter.dart';

  class BoardWidget extends StatelessWidget {
   final BoardEntity board;
   static const colors = WemaindColors();

   BoardWidget(this.board);

     @override
      Widget build(BuildContext context) {
      final theme = Theme.of(context);
    return ConstrainedBox(constraints: BoxConstraints(maxWidth: 500, minWidth: 280, minHeight: 300),
    child:GestureDetector(
    onTap: () {
      Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context)
      {return TasksPage(board: board);
      }));
    },
    child:
    Container(
      height: MediaQuery.of(context).size.height * 0.2,
      child: Card(margin: EdgeInsets.only(top: 0, bottom: 16, left: 16, right: 16),
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
                Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Row(crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic,
                        children: [
                          Flexible(
                              child: Text(board.name,
                                style: theme.textTheme.headline2,
                                )),
                          if (board.bookmarked) Icon(Icons.star, color: colors.orange),
                        ],
                      ),
            Row(children:[
            Flexible(
            child: Text(board.role.toUpperCase(),style: theme.textTheme.headline4,overflow: TextOverflow.ellipsis,)),
                   ]),
                    ]),
                Column(mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start,children: [
                  Row(mainAxisAlignment: MainAxisAlignment.start, children: [
                    Text(board.tasks.all.toString(), style: theme.textTheme.headline1),
                    Icon(Icons.more_vert, color: colors.blue.shade800, size: 32),
                  ]),
                  Row(mainAxisAlignment: MainAxisAlignment.start, children: [
                    Text('TASK'.toUpperCase(), style: theme.textTheme.headline5),
                  ])
                ]),
              ]),
              Table(
                  children: [
                    TableRow(children: [
                      TaskCounter('PRIORITARI', Icons.bolt, colors.orange, board.tasks.prioritized),
                      TaskCounter('IN SCADENZA', Icons.alarm, colors.red, board.tasks.expiring),
                      Container(),
                    ]),
                    TableRow(children: [
                      TaskCounter('MIEI', Icons.person, theme.accentColor, board.tasks.owned),
                      TaskCounter('DEL TEAM', Icons.group, theme.accentColor, board.tasks.teamOwned),
                      TaskCounter('IN AVVIO', Icons.calendar_today, theme.accentColor, board.tasks.starting),
                    ])
                  ]
              ),
            ],
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            mainAxisSize: MainAxisSize.min,
          ),
        ),
      ),
    )
    )
);
  }
 }

希望有人可以帮助我:)

【问题讨论】:

    标签: flutter card adaptive-layout


    【解决方案1】:

    尝试更智能地使用空间。此代码将使您免于遇到问题

    class BoardWidget extends StatelessWidget {
      // final BoardEntity board;
      // static const colors = WemaindColors();
    
      // BoardWidget(this.board);
    
      @override
      Widget build(BuildContext context) {
        final theme = Theme.of(context);
        return Scaffold(
          body: SafeArea(
            child: GestureDetector(
                // onTap: () {
                //   Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context)
                //   {return TasksPage(board: board);
                //   }));
                // },
                child:
                Container(
                  height: 300,
                  width: 400,
                  child: Card(margin: EdgeInsets.only(top: 0, bottom: 16, left: 16, right: 16),
                    child: Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Column(
                        children: [
                          Expanded(
                            child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
                              Expanded(
                                child: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                                    crossAxisAlignment: CrossAxisAlignment.start,
                                    children: [
                                      Expanded(
                                        child: Row(crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic,
                                          children: [
                                            Expanded(
                                              child: Text("board.name",
                                              ),
                                            ),
                                            if (true) Icon(Icons.star, color: Colors.orange),
                                          ],
                                        ),
                                      ),
                                      Expanded(
                                        child: Row(children:[
                                          Expanded(child: Text("board.role.toUpperCase()", overflow: TextOverflow.ellipsis,)),
                                        ]),
                                      ),
                                    ]),
                              ),
                              Expanded(
                                child: Column(mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start,children: [
                                  Expanded(
                                    child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
                                      Expanded(child: Text("board.tasks.all.toString()")),
                                      Icon(Icons.more_vert, color: Colors.blue.shade800, size: 32),
                                    ]),
                                  ),
                                  Expanded(
                                    child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
                                      Text('TASK'.toUpperCase()),
                                    ]),
                                  )
                                ]),
                              ),
                            ]),
                          ),
                          Table(
                              children: [
                                TableRow(children: [
                                  Container(child: Icon(Icons.bolt)),
                                  Container(child: Icon(Icons.alarm)),
                                  Container(),
                                ]),
                                TableRow(children: [
                                  Container(child: Icon(Icons.person),),
                                  Container(child: Icon(Icons.group),),
                                  Container(child: Icon(Icons.calendar_today),),
                                ])
                              ]
                          ),
                        ],
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        mainAxisSize: MainAxisSize.min,
                      ),
                    ),
                  ),
                )
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 我尝试使用您的代码,但该卡未显示在模拟器中,我在另一个类中调用此小部件: class BoardsList extends StatelessWidget { final List board; BoardsList(this.boards); @override Widget build(BuildContext context) { return ListView.builder( padding: E​​dgeInsets.only(top: 0, bottom: 16, left: 8, right: 8), itemCount: board.length, itemBuilder: (context, index) { return Center(child: BoardWidget(boards[index])); } );我也应该在这里改变一些东西吗?
    • 取消注释我的例子中的代码,我没有你的数据,所以我把它去掉以便编译器启动
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2011-10-08
    • 2021-05-18
    • 2019-03-30
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多