Ich versuche, ein Hintergrundbild für die Homepage festzulegen. Ich bekomme den Bildplatz vom Beginn des Bildschirms und fülle die Breite, aber nicht die Höhe. Fehlt mir etwas in meinem Code? Gibt es Bildstandards für Flattern? Skalieren Bilder basierend auf der Bildschirmauflösung jedes Telefons?
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")
]
)
)
);
}
}
Ich bin nicht sicher, ob ich Ihre Frage verstehe, aber wenn Sie möchten, dass das Bild den gesamten Bildschirm ausfüllt, können Sie eine DecorationImage
mit einem Fit BoxFit.cover
verwenden.
class BaseLayout extends StatelessWidget{
@override
Widget build(BuildContext context){
return new Scaffold(
body: new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
image: new AssetImage("assets/images/bulb.jpg"),
fit: BoxFit.cover,
),
),
child: null /* add child content here */,
),
);
}
}
Für Ihre zweite Frage finden Sie hier einen Link zu documentation , wie Sie auflösungsabhängige Asset-Images in Ihre App einbetten können.
Wenn Sie eine Container
als Körper der Scaffold
verwenden, ist ihre Größe entsprechend der Größe des untergeordneten Objekts. In der Regel ist dies nicht das, was Sie möchten, wenn Sie versuchen, der App ein Hintergrundbild hinzuzufügen.
Bei der Betrachtung von dieser anderen / Frage schlug @ collin-jackson auch vor, Stack
anstelle von Container
als Körper der Scaffold
zu verwenden, und es tut definitiv, was Sie erreichen wollen.
So sieht mein Code aus
@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"),
)
],
)
);
}
Sie können Stack
verwenden, um das Bild auf den gesamten Bildschirm auszudehnen.
Stack(
children: <Widget>
[
Positioned.fill( //
child: Image(
image: AssetImage('assets/placeholder.png'),
fit : BoxFit.fill,
),
),
...... // other children widgets of Stack
..........
.............
]
);
Hinweis: Wenn Sie eine Scaffold
verwenden, können Sie die Stack
optional mit oder ohne Scaffold
in die AppBar
einfügen.
Ich konnte einen Hintergrund unter dem Scaffold
(und es ist sogar AppBar
) anwenden, indem ich den Scaffold
unter einen Stack
stellte und einen Container
einstellte ] _ in der ersten "Ebene" mit dem Hintergrundbild und der Eigenschaft fit: BoxFit.cover
.
Sowohl für Scaffold
als auch für AppBar
muss backgroundColor
als Color.transparent
Festgelegt und elevation
von AppBar
muss festgelegt sein 0 (Null) sein.
Voilà! Jetzt haben Sie einen schönen Hintergrund unter dem gesamten Scaffold und der 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: () => {},
),
),
],
),
),
),
],
);
}
}