I have a Container whitch needs to include two TextField where i can insert a product name and description. It is supposed to appear, and take its place, when a FloatingActionButton is pressed. This is actually working till I insert the TextField and I can't understand why.
This is the Cointainer code i wrote:
Padding(
padding: const EdgeInsets.only(top: 4, bottom: 12),
child: Container(
width: 400,
height: 125,
decoration: BoxDecoration(
color: Color(0xFF00ABB3),
borderRadius: BorderRadius.all(Radius.circular(widgetsRadius))
),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 25),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
TextField(
decoration: InputDecoration(
hintText: "Name"
),
),
TextField(
decoration: InputDecoration(
hintText: "Description"
),
)
],
),
),
GestureDetector(
onTap: () {
setState(() {
isButtonVisible = !isButtonVisible;
});
},
child: Icon(Icons.arrow_circle_right, color: Colors.white,)
)
],
),
),
),
);
This is the result without the two TextField:
https://i.stack.imgur.com/PxWNp.png
This is the result with the two TextField:
https://i.stack.imgur.com/ttEY3.png
CodePudding user response:
If you run your code, you'll see this error in the output:
layoutConstraints.maxWidth < double.infinity
"An InputDecorator, which is typically created by a TextField, cannot have an unbounded width.\nThis happens when the parent widget does not provide a finite width constraint. For example, if the InputDecorator is contained by a Row, then its width must be constrained. An Expanded widget or a SizedBox can be used to constrain the width of the InputDecorator or the TextField that contains it."
This means that TextField is taking up an infinite width.
So, wrap your TextFied with a SizedBox:
SizedBox(
width: 100,
child: TextField(
decoration: InputDecoration(hintText: "Name"),
),
),
Additionally, you might want to increase the height of the parent Container() in order to view all the widgets as they're being cut off.
Here's a complete runnable example:
import 'package:flutter/material.dart';
const Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(
scaffoldBackgroundColor: darkBlue,
),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 4, bottom: 12),
child: Container(
width: 400,
height: 300,
decoration: BoxDecoration(
color: Color(0xFF00ABB3),
borderRadius: BorderRadius.all(Radius.circular(15))),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 25),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
SizedBox(
width: 100,
child: TextField(
decoration: InputDecoration(hintText: "Name"),
),
),
SizedBox(
width: 100,
child: TextField(
decoration: InputDecoration(hintText: "Description"),
),
)
],
),
),
GestureDetector(
onTap: () {
setState(() {
// isButtonVisible = !isButtonVisible;
});
},
child: Icon(
Icons.arrow_circle_right,
color: Colors.white,
))
],
),
),
),
);
;
}
}
CodePudding user response:
You can wrap the Padding widget with Expanded, it will take the available width inside Row for TextField.
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(child:Padding(
padding: const EdgeInsets.symmetric(vertical: 25),
child: Column(
