Używam Fluttera i chciałbym dodać obramowanie do widgetu (w tym przypadku widgetu Tekst).
Próbowałem TextStyle i Text, ale nie widziałem, jak dodać obramowanie.
Odpowiedzi:
Oto rozszerzona odpowiedź. A DecoratedBox
jest tym, czego potrzebujesz, aby dodać obramowanie, ale używam go Container
dla wygody dodawania marginesów i dopełnienia.
Oto ogólna konfiguracja.
Widget myWidget() {
return Container(
margin: const EdgeInsets.all(30.0),
padding: const EdgeInsets.all(10.0),
decoration: myBoxDecoration(), // <--- BoxDecoration here
child: Text(
"text",
style: TextStyle(fontSize: 30.0),
),
);
}
gdzie BoxDecoration
jest
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border.all(),
);
}
Mają one szerokość obramowania 1
, 3
oraz 10
odpowiednio.
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border.all(
width: 1, // <--- border width here
),
);
}
Te mają kolor obramowania
Colors.red
Colors.blue
Colors.green
Kod
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border.all(
color: Colors.red, // <--- border color
width: 5.0,
),
);
}
Te mają stronę graniczną
Kod
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border(
left: BorderSide( // <--- left side
color: Colors.black,
width: 3.0,
),
top: BorderSide( // <--- top side
color: Colors.black,
width: 3.0,
),
),
);
}
Te mają granic promienie 5
, 10
i 30
odpowiednio.
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border.all(
width: 3.0
),
borderRadius: BorderRadius.all(
Radius.circular(5.0) // <--- border radius here
),
);
}
DecoratedBox
/ BoxDecoration
są bardzo elastyczne. Przeczytaj ściągawkę Flutter - BoxDecoration, aby znaleźć wiele innych pomysłów.
Jak stwierdzono w dokumentacji, flutter przedkłada kompozycję nad parametry. W większości przypadków to, czego szukasz, nie jest właściwością, ale opakowaniem (a czasem kilku pomocników / „konstruktorów”)
W przypadku granic to, czego chcesz DecoratedBox
, ma decoration
właściwość definiującą granice; ale także obrazy tła lub cienie.
Alternatywnie, jak powiedział @Aziza, możesz użyć Container
. Który jest połączeniem DecoratedBox
, SizedBox
a kilka innych przydatnych widżetów.
Najlepszym sposobem jest użycie BoxDecoration ()
Korzyść
Niekorzyść
BoxDecoration
używaj tylko z Container
widżetem, więc chcesz zawinąć swój widżetContainer()
Przykład
Container(
margin: EdgeInsets.all(10),
padding: EdgeInsets.all(10),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.orange,
border: Border.all(
color: Colors.pink[800],// set border color
width: 3.0), // set border width
borderRadius: BorderRadius.all(
Radius.circular(10.0)), // set rounded corner radius
boxShadow: [BoxShadow(blurRadius: 10,color: Colors.black,offset: Offset(1,3))]// make rounded corner of border
),
child: Text("My demo styling"),
)
Używanie BoxDecoration () to najlepszy sposób na pokazanie obramowania.
Container(
decoration: BoxDecoration(
border: Border.all(
color: Color(0xff000000),
width: 4,
)),
child: //Your child widget
),
Możesz również wyświetlić pełny format tutaj