简体   繁体   English

ConstrainedBox 中的 Flutter 图标小部件

[英]Flutter icon widget in ConstrainedBox

class MyHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Container(
          child: ConstrainedBox(
            constraints: BoxConstraints(
              maxHeight: 100,
              maxWidth: 100,
            ),
            child: Icon(
              Icons.backup,
              size: 200,
            ),
          ),
        ));
  }
}

in the above code, if i replace icon widget with image or text they stay at ConstrainedBox boundaries, but icon get full size?在上面的代码中,如果我用图像或文本替换图标小部件,它们会停留在 ConstrainedBox 边界,但图标会变成全尺寸吗? why?为什么?

图标框

You can copy paste run full code below您可以在下面复制粘贴运行完整代码
Because in Icon 's source code, it's actually use RichText and TextOverflow.visible因为在Icon的源代码中,它实际上是使用RichTextTextOverflow.visible
source code link https://github.com/flutter/flutter/blob/8df56056b4914060784e68e6b149a30319b75d3d/packages/flutter/lib/src/widgets/icon.dart#L174源代码链接https://github.com/flutter/flutter/blob/8df56056b4914060784e68e6b149a30319b75d3d/packages/flutter/lib/src/widgets/icon.dart#L174

code snippet of souce code源代码的代码片段

Widget iconWidget = RichText(
  overflow: TextOverflow.visible, // Never clip.
  textDirection: textDirection, // Since we already fetched it for the assert...
  text: TextSpan(
    text: String.fromCharCode(icon!.codePoint),
    style: TextStyle(
      inherit: false,
      color: iconColor,
      fontSize: iconSize,
      fontFamily: icon!.fontFamily,
      package: icon!.fontPackage,
    ),
  ),
);

working demo use RichText工作演示使用RichText

在此处输入图像描述

full code use RichText完整代码使用RichText

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,
      ),
      home: MyHome(),
    );
  }
}

class MyHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Container(
          child: ConstrainedBox(
              constraints: BoxConstraints(
                maxHeight: 100,
                maxWidth: 100,
              ),
              child: RichText(
                overflow: TextOverflow.visible, // Never clip.
                //textDirection: textDirection, // Since we already fetched it for the assert...
                text: TextSpan(
                  text: String.fromCharCode((Icons.backup).codePoint),
                  style: TextStyle(
                    inherit: false,
                    color: Colors.blue,
                    fontSize: 200,
                    fontFamily: (Icons.backup).fontFamily,
                    package: (Icons.backup).fontPackage,
                  ),
                ),
              )),
        ));
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM