【问题标题】:Flutter overlay image over listtile title在 listtile 标题上颤动覆盖图像
【发布时间】:2021-10-03 18:49:53
【问题描述】:

像这样布置图像、标题和图标的最佳方式是什么

当使用带有前导图像、标题和尾随的 ListTile 时,我得到了这个

【问题讨论】:

  • 您可以为此目的使用Stack。在其中添加两个孩子,一个将是图像,然后将接下来的两个添加到一行中,将它们添加到图像旁边。用Padding调整行的位置。
  • @ZeeshanAhmad 你不应该使用Padding 在堆栈中定位小部件;这就是 PositionedAlign 的用途。
  • Align 在上述情况下不起作用。 Positioned 也可以使用,但根据我的经验,它在某些屏幕上没有响应。这就是为什么我建议Padding。这一切都取决于用例。

标签: flutter


【解决方案1】:

给你: 使用 Stack 小部件时,我们首先添加了 containertext 小部件,然后添加了 CircleAvatar 小部件,以便 CircleAvatar 可以覆盖文本小部件。

            Stack(
              alignment: Alignment.centerLeft,
              children: [
                Container(
                  width: 300,  //define the size of text widget here
                  margin:
                      EdgeInsets.only(left: 20, top: 10, bottom: 10, right: 10),
                  padding:
                      EdgeInsets.only(left: 50, top: 10, bottom: 10, right: 10),
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(5),
                    color: Colors.black,
                  ),
                  child: Text(
                    'Mr. Bun Burgers',
                    style: TextStyle(
                        color: Colors.white,
                        fontSize: 25,
                        fontWeight: FontWeight.bold),
                  ),
                ),
                CircleAvatar(
                  radius: 30,
                  child: Icon(Icons.photo),   // Replace this icon widget with your Image asset widget.
                ),
              ],
            ),

输出:

【讨论】:

    【解决方案2】:

    这是我使用“堆栈”的实现。
    因为有一个固定的大小值,我认为它是否是最好的解决方案。

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      void initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: _buildBody(),
          floatingActionButton: FloatingActionButton(
            onPressed: () {},
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        );
      }
    
      Widget _buildBody() {
        return Container(
            height: 70,
            color: Color(0XFFFFA000),
            child: Container(
              margin: EdgeInsets.symmetric(vertical: 10, horizontal: 15),
              child: Stack(
                alignment: Alignment.center,
                children: [
                  Row(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Container(
                        padding: EdgeInsets.symmetric(
                          vertical: 5,
                          horizontal: 30,
                        ),
                        margin: EdgeInsets.only(left: 30),
                        decoration: BoxDecoration(
                          color: Colors.black,
                          borderRadius: BorderRadius.circular(5),
                        ),
                        child: Text(
                          'El ilustre',
                          style: TextStyle(
                            fontWeight: FontWeight.bold,
                            color: Colors.white,
                            fontSize: 25,
                          ),
                        ),
                      ),
                      Icon(Icons.arrow_forward, color: Colors.white),
                    ],
                  ),
                  Positioned(
                    left: 0,
                    child: ClipRRect(
                      borderRadius: BorderRadius.circular(35.0),
                      child: Image.network(
                        'https://i.ibb.co/1vXpqVs/flutter-logo.jpg',
                        width: 50,
                        height: 50,
                        fit: BoxFit.fill,
                      ),
                    ),
                  )
                ],
              ),
            ));
      }
    }
    

    【讨论】:

    • 谢谢,我使用了这个答案(稍作调整,将带有标题的容器包含在 Expanded 小部件中以展开黑框)
    猜你喜欢
    • 2020-09-06
    • 2017-01-23
    • 2021-06-06
    • 2014-11-18
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多