Flutter SDK Set Gambar latar belakang

122

Saya mencoba mengatur gambar latar belakang untuk halaman rumah. Saya mendapatkan tempat gambar dari awal layar dan mengisi lebar tetapi bukan tingginya. Apakah saya melewatkan sesuatu di kode saya? Apakah ada standar gambar untuk flutter? Apakah gambar diskalakan berdasarkan resolusi layar masing-masing ponsel?

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") 
          ]
        )
      )
    );
  }
}
Arun Kumar
sumber
Berapa ukuran gambarnya? lebar tinggi?
ArgaPK
Adakah yang bisa memberi contoh dengan panggilan gambar jaringan
The Dead Guy
1
@TheDeadGuy Image.network (' example.com/path/to/image.jpg' )?
SacWebDeveloper
solusi checkout di sini di tautan ini stackoverflow.com/a/62245570/9955978
Shubham Sharma
Tidak ada komentar yang disebutkan membantu dalam kasus saya - tolong jangan tanya mengapa. Berikut tautan yang berguna dengan penjelasan: educity.app/flutter/…
boldnik

Jawaban:

332

Saya tidak yakin saya mengerti pertanyaan Anda, tetapi jika Anda ingin gambar memenuhi seluruh layar, Anda dapat menggunakan a DecorationImagedengan ukuran yang sesuai 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 */,
      ),
    );
  }
}

Untuk pertanyaan kedua Anda, berikut ini link ke dokumentasi tentang cara menyematkan gambar aset yang bergantung pada resolusi ke dalam aplikasi Anda.

Collin Jackson
sumber
8
Ini bekerja selama Anda tidak punya anak. Jika Anda menambahkan anak, maka ukuran Penampung akan menyusut ke ukuran anaknya. Tahukah Anda cara membuat wadah mengisi semua layar tidak peduli ukuran anaknya?
HyLian
@ColinJackson berapa ukuran gambarnya? lebar tinggi?
ArgaPK
4
@HyLian mengatur properti kendala wadah,constraints: BoxConstraints.expand()
Rustem Kakimov
2
Untuk citra jaringan, seseorang dapat menggunakanDecorationImage(image: Image.network("http://example.com/image.jpg").image, ...)
Eugene Gr. Philippov
@HyLian tambahkan width: double.infinityke Container dengan gambar.
jkoech
45

Jika Anda menggunakan a Containersebagai badan dari Scaffold, ukurannya akan sesuai dengan ukuran anaknya, dan biasanya bukan itu yang Anda inginkan saat mencoba menambahkan gambar latar belakang ke aplikasi Anda.

Melihat pertanyaan lain ini , @ collin-jackson juga menyarankan untuk menggunakan Stackalih-alih Containersebagai tubuh Scaffolddan pasti melakukan apa yang ingin Anda capai.

Seperti inilah tampilan kode saya

@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"),
        )
      ],
    )
  );
}
HyLian
sumber
Berapa ukuran gambarnya? lebar tinggi?
ArgaPK
5
Membuka keyboard mengubah ukuran gambar. Apa yang bisa dilakukan untuk itu?
Michael Hathi
15

Anda bisa menggunakan 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)),
  );
}

Keluaran:

masukkan deskripsi gambar di sini

CopsOnRoad
sumber
11

Anda dapat menggunakan Stackuntuk membuat gambar membentang ke layar penuh.

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

Catatan: Secara opsional jika menggunakan Scaffold, Anda dapat meletakkan bagian Stackdalam Scaffolddengan atau tanpa AppBarsesuai dengan kebutuhan Anda.

Shubhamhackz
sumber
Persis yang saya butuhkan, dalam kasus saya gambar saya ada di dalam a ShaderMask, oleh karena itu tidak akan berhasil memasukkan image:nama.
Segera Santos
5

Saya bisa menerapkan latar belakang di bawah Scaffold(dan bahkan itu AppBar) dengan meletakkan di Scaffoldbawah a Stackdan mengatur Containerdi "lapisan" pertama dengan set gambar latar belakang dan fit: BoxFit.coverproperti.

Baik Scaffolddan AppBarharus memiliki backgroundColorhimpunan sebagai Color.transparentdan elevationdari AppBarharus 0 (nol).

Voilà! Sekarang Anda memiliki latar belakang yang bagus di bawah seluruh Perancah dan 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: () => {},
                  ),
                ),
              ],
            ),
          ),
        ),
      ],
    );
  }
}
Tuco
sumber
3

Kita bisa menggunakan Container dan menandai tingginya sebagai tak terbatas

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',
        ),
      ),
    ));

Keluaran:

masukkan deskripsi gambar di sini

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

ini juga berfungsi di dalam wadah.

pasta vinayak
sumber
-1

Untuk menyetel gambar latar belakang tanpa menyusut setelah menambahkan anak, gunakan kode ini.

  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>[],
    ),
    ),
Dulya Perera
sumber
-1
body: Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: AssetImage('images/background.png'),fit:BoxFit.cover
      )
    ),
);
Balachandran Muthuraj
sumber
Jawaban yang diberikan ditandai untuk ditinjau sebagai Postingan Berkualitas Rendah. Berikut adalah beberapa pedoman untuk Bagaimana cara menulis jawaban yang baik? . Jawaban yang diberikan ini bisa mendapatkan keuntungan dari penjelasan. Jawaban kode saja tidak dianggap sebagai jawaban "baik".
Trenton McKinney