Flutter SDKセットの背景画像


122

ホームページの背景画像を設定しようとしています。画面の最初から画像の場所を取得し、幅ではなく高さを埋めています。コードに何か不足していますか?フラッターの画像規格はありますか?画像は各スマートフォンの画面解像度に基づいて拡大縮小されますか?

class BaseLayout extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return new Scaffold(
      body: new Container(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            new Image.asset("assets/images/bulb.jpg") 
          ]
        )
      )
    );
  }
}

画像のサイズはどうあるべきですか?幅高さ?
ArgaPK 2018

誰かがネットワークイメージコールの例を示すことができます
The Dead Guy

1
@TheDeadGuy Image.network( ' example.com/path/to/image.jpg')?
SacWebDeveloper

このリンクでここにチェックアウト・ソリューション stackoverflow.com/a/62245570/9955978
Shubhamシャルマ

私の場合、言及されたコメントはどれも役に立ちませんでした-理由を尋ねないでください。説明付きここでの便利なリンク:educity.app/flutter/...
boldnik

回答:


331

私はあなたの質問を理解しているのかわかりませんが、画像を画面全体に表示したい場合は、DecorationImageを使用できますBoxFit.cover

class BaseLayout extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage("assets/images/bulb.jpg"),
            fit: BoxFit.cover,
          ),
        ),
        child: null /* add child content here */,
      ),
    );
  }
}

2つ目の質問については、解像度に依存するアセット画像をアプリに埋め込む方法に関するドキュメントへのリンクです。


8
これは子供がいない限り機能します。子を追加すると、コンテナのサイズが子のサイズに縮小されます。子のサイズに関係なく、コンテナがすべての画面を埋める方法を知っていますか?
HyLian 2018年

@ColinJackson画像のサイズはどうあるべきですか?幅高さ?
ArgaPK 2018

4
@HyLianがコンテナの制約プロパティを設定、constraints: BoxConstraints.expand()
Rustem Kakimov

2
ネットワークイメージのために、一つは使用することができますDecorationImage(image: Image.network("http://example.com/image.jpg").image, ...)
ユージンGrのを。フィリポフ

@HyLian width: double.infinityは、イメージを含むコンテナに追加します。
jkoech

45

Containerの本体としてaを使用する場合Scaffold、そのサイズはそれに応じてその子のサイズになります。通常、アプリに背景画像を追加しようとすると、そのサイズは望ましくありません。

この別の質問を見ると、@ collin-jacksonはの本体としてではStackなくを使用することも提案しContainerScaffoldおり、確実に達成したいことを実行します。

これは私のコードがどのように見えるかです

@override
Widget build(BuildContext context) {
  return new Scaffold(
    body: new Stack(
      children: <Widget>[
        new Container(
          decoration: new BoxDecoration(
            image: new DecorationImage(image: new AssetImage("images/background.jpg"), fit: BoxFit.cover,),
          ),
        ),
        new Center(
          child: new Text("Hello background"),
        )
      ],
    )
  );
}

画像のサイズはどうあるべきですか?幅高さ?
ArgaPK 2018

4
キーボードを開くと、画像のサイズが変更されます。そのために何ができますか?
Michael Hathi

15

使用できますDecoratedBox

@override
Widget build(BuildContext context) {
  return DecoratedBox(
    decoration: BoxDecoration(
      image: DecorationImage(image: AssetImage("your_asset"), fit: BoxFit.cover),
    ),
    child: Center(child: FlutterLogo(size: 300)),
  );
}

出力:

ここに画像の説明を入力してください


11

を使用Stackして、画像を全画面に拡大できます。

Stack(
        children: <Widget>
        [
          Positioned.fill(  //
            child: Image(
              image: AssetImage('assets/placeholder.png'),
              fit : BoxFit.fill,
           ),
          ), 
          ...... // other children widgets of Stack
          ..........
          .............
         ]
 );

注:オプションでを使用している場合は、必要に応じて内部または内部Scaffoldを配置できます。StackScaffoldAppBar


私の場合、私の場合、画像は内にあるShaderMaskため、image:名前を入力しても機能しません。
まもなくサントス

5

の下に配置し、最初の「レイヤー」にa を設定することで、背景画像セットとプロパティを使用して、その下にScaffold(さらにはそれもAppBar)背景を適用することができました。ScaffoldStackContainerfit: BoxFit.cover

両方ScaffoldAppBar有していなければならないbackgroundColorようにセットColor.transparentし、elevationのは、AppBar0(ゼロ)でなければなりません。

ほら!これでScaffoldとAppBar全体の下に素敵な背景ができました!:)

import 'package:flutter/material.dart';
import 'package:mynamespace/ui/shared/colors.dart';
import 'package:mynamespace/ui/shared/textstyle.dart';
import 'package:mynamespace/ui/shared/ui_helpers.dart';
import 'package:mynamespace/ui/widgets/custom_text_form_field_widget.dart';

class SignUpView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack( // <-- STACK AS THE SCAFFOLD PARENT
      children: [
        Container(
          decoration: BoxDecoration(
            image: DecorationImage(
              image: AssetImage("assets/images/bg.png"), // <-- BACKGROUND IMAGE
              fit: BoxFit.cover,
            ),
          ),
        ),
        Scaffold(
          backgroundColor: Colors.transparent, // <-- SCAFFOLD WITH TRANSPARENT BG
          appBar: AppBar(
            title: Text('NEW USER'),
            backgroundColor: Colors.transparent, // <-- APPBAR WITH TRANSPARENT BG
            elevation: 0, // <-- ELEVATION ZEROED
          ),
          body: Padding(
            padding: EdgeInsets.all(spaceXS),
            child: Column(
              children: [
                CustomTextFormFieldWidget(labelText: 'Email', hintText: 'Type your Email'),
                UIHelper.verticalSpaceSM,
                SizedBox(
                  width: double.maxFinite,
                  child: RaisedButton(
                    color: regularCyan,
                    child: Text('Finish Registration', style: TextStyle(color: white)),
                    onPressed: () => {},
                  ),
                ),
              ],
            ),
          ),
        ),
      ],
    );
  }
}

3

コンテナを使用して、その高さを無限大としてマークできます

body: Container(
      height: double.infinity,
      width: double.infinity,
      child: FittedBox(
        fit: BoxFit.cover,
        child: Image.network(
          'https://cdn.pixabay.com/photo/2016/10/02/22/17/red-t-shirt-1710578_1280.jpg',
        ),
      ),
    ));

出力:

ここに画像の説明を入力してください


2
decoration: BoxDecoration(
      image: DecorationImage(
        image: ExactAssetImage("images/background.png"),
        fit: BoxFit.cover
      ),
    ),

これはコンテナ内でも機能します。


-1

子を追加した後で縮小せずに背景画像を設定するには、このコードを使用します。

  body: Container(
    constraints: BoxConstraints.expand(),
      decoration: BoxDecoration(
        image: DecorationImage(
            image: AssetImage("assets/aaa.jpg"),
        fit: BoxFit.cover,
        )
      ),

    //You can use any widget
    child: Column(
      children: <Widget>[],
    ),
    ),

-1
body: Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: AssetImage('images/background.png'),fit:BoxFit.cover
      )
    ),
);

提供された回答には、低品質の投稿としてレビュー用のフラグが付けられました。ここではいくつかのためのガイドラインです、私は良い答えを書くにはどうすればよいですか?。この提供された答えは説明から利益を得ることができます。コードのみの回答は「良い」回答とは見なされません。
トレントンマッキーニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.