Flutter SDK Set ภาพพื้นหลัง


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

ใครช่วยยกตัวอย่างด้วยการโทรภาพเครือข่าย
The Dead Guy

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

วิธีการชำระเงินที่นี่ในลิงค์นี้ stackoverflow.com/a/62245570/9955978
Shubham Sharma

ความคิดเห็นที่กล่าวถึงไม่มีส่วนช่วยในกรณีของฉัน - โปรดอย่าถามว่าทำไม ลิงค์ที่มีประโยชน์พร้อมคำอธิบายมีดังนี้Educity.app/flutter/…
boldnik

คำตอบ:


333

ผมไม่แน่ใจว่าผมเข้าใจคำถามของคุณ แต่ถ้าคุณต้องการภาพให้เต็มหน้าจอทั้งหมดที่คุณสามารถใช้กับความเหมาะสมของDecorationImageBoxFit.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, ...)
Eugene Gr. Philippov

@HyLian เพิ่มลงwidth: double.infinityในคอนเทนเนอร์พร้อมรูปภาพ
jkoech

46

หากคุณใช้ a 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
          ..........
          .............
         ]
 );

หมายเหตุ: อีกทางเลือกหนึ่งหากใช้ a Scaffoldคุณสามารถใส่Stackด้านในScaffoldโดยมีหรือไม่ก็ได้AppBarตามความต้องการของคุณ


สิ่งที่ฉันต้องการในกรณีของฉันภาพของฉันอยู่ใน a ShaderMaskดังนั้นมันจึงใช้ไม่ได้ในการใส่image:ชื่อ
Soon Santos

5

ฉันสามารถใช้พื้นหลังด้านล่างScaffold(และแม้กระทั่งมันAppBar) ได้โดยใส่ด้านScaffoldล่างStackและตั้งค่าContainerใน "เลเยอร์" แรกด้วยชุดภาพพื้นหลังและfit: BoxFit.coverคุณสมบัติ

ทั้งScaffoldและAppBarต้องมีการbackgroundColorตั้งค่าเป็นColor.transparentและelevationของAppBarจะต้องเป็น 0 (ศูนย์)

โวล่า! ตอนนี้คุณมีพื้นหลังที่สวยงามด้านล่างทั้ง 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

เราสามารถใช้ Container และทำเครื่องหมายความสูงเป็นอินฟินิตี้

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.