Flutter SDK Set 배경 이미지


122

홈 페이지의 배경 이미지를 설정하려고합니다. 화면 시작 부분에서 이미지 위치를 얻고 너비는 채우지 만 높이는 채우지 않습니다. 내 코드에 뭔가 빠졌나요? Flutter에 대한 이미지 표준이 있습니까? 각 휴대폰의 화면 해상도에 따라 이미지 크기가 조정 되나요?

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

누군가가 네트워크 이미지 호출로 예를 줄 수
죽은 사람에게

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

이 링크의 체크 아웃 솔루션 stackoverflow.com/a/62245570/9955978
Shubham Sharma

언급 된 의견 중 어느 것도 제 경우에 도움이되지 않았습니다. 이유를 묻지 마십시오. 다음은 설명과 함께 유용한 링크입니다. educity.app/flutter/…
boldnik

답변:


332

질문을 이해했는지 잘 모르겠지만 이미지가 전체 화면을 채우 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 */,
      ),
    );
  }
}

두 번째 질문에 대한 링크는 해상도 종속 자산 이미지를 앱에 포함하는 방법에 대한 문서 링크 입니다.


8
자녀가없는 한 작동합니다. 자식을 추가하면 컨테이너의 크기가 자식의 크기로 축소됩니다. 컨테이너가 자식의 크기에 관계없이 모든 화면을 채우도록 만드는 방법을 알고 있습니까?
HyLian

@ColinJackson 이미지의 크기는 얼마입니까? 너비 * 높이?
ArgaPK

4
@HyLian은 컨테이너의 제약 속성을 설정합니다.constraints: BoxConstraints.expand()
Rustem Kakimov

2
네트워크 이미지를 위해, 하나는 사용할 수 있습니다DecorationImage(image: Image.network("http://example.com/image.jpg").image, ...)
유진 할머니를. Philippov

@HyLian width: double.infinity은 이미지와 함께 컨테이너에 추가 합니다.
jkoech

45

Container를의 본문으로 사용하는 경우 Scaffold크기는 그에 따라 자식의 크기가되며 일반적으로 앱에 배경 이미지를 추가하려고 할 때 원하는 크기가 아닙니다.

이 다른 질문을 살펴보면 @ collin-jackson은 Stack대신 Container본문으로 사용하도록 제안 Scaffold했으며 달성하려는 작업을 확실히 수행합니다.

이것이 내 코드의 모습입니다.

@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

5
키보드를 열면 이미지 크기가 조정됩니다. 그것을 위해 무엇을 할 수 있습니까?
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, 당신은 넣을 수 있습니다 Stack내부를 Scaffold하거나하지 않고 AppBar필요에 따라.


정확히 필요한 것, 내 경우에는 내 이미지가 내부에 ShaderMask있으므로 image:이름 을 입력하면 작동하지 않습니다 .
Soon Santos

5

나는 아래에 배경을 적용 할 수 있었다 Scaffold(심지어 그것의 AppBar)을 넣어 Scaffold아래에있는 A Stack와 설정 Container배경 이미지 세트와 함께 최초의 "레이어"의 fit: BoxFit.cover속성입니다.

모두 ScaffoldAppBar가져야 backgroundColor같은 세트 Color.transparentelevation의은 AppBar0이어야한다.

Voilà! 이제 전체 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
      )
    ),
);

제공된 답변은 검토를 위해 저품질 게시물로 표시되었습니다. 다음은 좋은 답변을 작성하는 방법에 대한 몇 가지 지침입니다 . . 이 제공된 답변은 설명에서 도움이 될 수 있습니다. 코드 전용 답변은 "좋은"답변으로 간주되지 않습니다.
Trenton McKinney
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.