2017-09-01 109 views
0

我想在我的应用程序,以显示大FlutterLogo: https://docs.flutter.io/flutter/material/FlutterLogo-class.htmlFlutterLogo可以拉伸填充吗?

为了考虑不同的屏幕尺寸,我想使它拉伸填满。那可能吗?或者我需要使用MediaQuery来确定父级的大小并将其传递给FlutterLogo(size :)?

我当前的代码:

Widget build(BuildContext context) { 
    return new Center(
     child: new FlutterLogo(size: 800.0, style: FlutterLogoStyle.horizontal, textColor: Colors.white), 
    ); 
    } 
+2

这篇文章可能有帮助 https://stackoverflow.com/questions/45817007/how-to-automatically-size-icons-in-flutter-to-be-as-big-as-possible – aziza

回答

0

enter image description here

我相信我已经回答了类似的问题

How to stretch an icon to fill parent?

https://docs.flutter.io/flutter/widgets/Expanded-class.html

https://groups.google.com/forum/#!msg/flutter-dev/lsgdU1yl7xc/0pYS2qrzBQAJ

https://docs.flutter.io/flutter/widgets/FittedBox-class.html

https://docs.flutter.io/flutter/painting/BoxFit-class.html

new Expanded(
     child: new FittedBox(
     fit: BoxFit.fill, 
     child: new FlutterLogo(style: FlutterLogoStyle.horizontal, textColor: Colors.white), 
    ), 
), 

我觉得有点儿奇怪。查看OP配置文件ID,我想知道我是否正确回答了这个问题。

我希望这会有所帮助。

使用此代码来运行它

import 'package:flutter/material.dart'; 

class MyAppBar extends StatelessWidget { 
    MyAppBar({this.title}); 

    // Fields in a Widget subclass are always marked "final". 

    final Widget title; 

    @override 
    Widget build(BuildContext context) { 
    return new Container(
     height: 56.0, // in logical pixels 
     padding: const EdgeInsets.symmetric(horizontal: 8.0), 
     decoration: new BoxDecoration(color: Colors.blue[500]), 
     // Row is a horizontal, linear layout. 
     child: new Row(
    // <Widget> is the type of items in the list. 
    children: <Widget>[ 
     new IconButton(
     icon: new Icon(Icons.menu), 
     tooltip: 'Navigation menu', 
     onPressed: null, // null disables the button 
    ), 
     // Expanded expands its child to fill the available space. 
     new Expanded(
     child: title, 
    ), 
     new IconButton(
     icon: new Icon(Icons.search), 
     tooltip: 'Search', 
     onPressed: null, 
    ), 
    ], 
    ), 
    ); 
    } 
} 

class MyScaffold extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    // Material is a conceptual piece of paper on which the UI appears. 
    return new Material(
     // Column is a vertical, linear layout. 
     child: new Column(
    children: <Widget>[ 
     new MyAppBar(
     title: new Text(
      'Example title', 
      style: Theme.of(context).primaryTextTheme.title, 
     ), 
    ), 
     new Expanded(
     child: new FittedBox(
      fit: BoxFit.fill, 
      child: new FlutterLogo(style: FlutterLogoStyle.horizontal, textColor: Colors.white), 
     ), 
    ), 
    ], 
    ), 
    ); 
    } 
} 


void main() { 
    runApp(new MaterialApp(
    title: 'My app', // used by the OS task switcher 
    home: new MyScaffold(), 
)); 
} 

编辑:我贴出完整的代码只是为了黑人,因为我忘了提,扩展需要被裹入行,列或柔性容器扩大了

+0

Won'工作。虽然容器尺寸合适,但图标不会(也将居中)。 – Darky

+0

@Darky 奇怪的是我测试了上面的代码,图标填满了父项。 – user1462442

+0

@ user142442啊,好像FlutterLogo的行为与通常的Icon Widget不同。所以我的坏,忘了它。 – Darky

0

您可以用ConstrainedBox做到这一点:

screenshot

import 'package:flutter/material.dart'; 

void main() { 
    runApp(new MyApp()); 
} 

class MyApp extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new MaterialApp(
     theme: new ThemeData.dark(), 
     home: new MyHomePage(), 
    ); 
    } 
} 

class MyHomePage extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     appBar: new AppBar(title: new Text('Example App')), 
     body: new ConstrainedBox(
     constraints: new BoxConstraints.expand(), 
     child: new FlutterLogo(
      style: FlutterLogoStyle.horizontal, 
      textColor: Colors.white, 
     ), 
    ), 
    ); 
    } 
}