首页 > 解决方案 > 小部件在第二次运行时为图标添加了额外的填充?

问题描述

我有一个显示日期选择器、图标和一些文本的日期选择器小部件。一些可选文本被传递到文本部分,因此根据调用它的位置,这是它的唯一区别。现在在某个页面上,这个 Widget 被调用了两次,但是在第二次,图标的左边距比第一次多。这个填充不应该在那里。两者之间唯一的区别是给每一个的可选文本,这似乎有足够的空间。我附上了代码和它的图像。感谢任何可以就如何摆脱额外间距提供一些建议的人!

正如您在图像中看到的,第一个图标下方的第二个图标有额外的填充

这是呈现日期选择器、图标和文本的小部件。

class DatePicker extends StatefulWidget {
   final String optionalText;

  DatePicker({Key key, @required this.optionalText}) : super(key: key);

  @override
   _DatePickerState createState() => _DatePickerState();
 }

 class _DatePickerState extends State<DatePicker> {
  DateTime selectedDate = DateTime.now();


   @override
   Widget build(BuildContext context) {
     return Container(
      child: Row(
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
       children: <Widget>[
        Container(
         width: MediaQuery.of(context).size.width * .50,
         height: MediaQuery.of(context).size.height * .07,
         child: Padding(
          padding: EdgeInsets.fromLTRB(33, 0, 5, 0),
          child: RaisedButton(
           color: Colors.white,
           shape: RoundedRectangleBorder(
               borderRadius: BorderRadius.circular(10)),
           child: dateHyphenReplacer(selectedDate),
           onPressed: () => _selectDate(context),
          ),
         ),
        ),
        Padding(
         padding: EdgeInsets.fromLTRB(5, 10, 0, 10),
         child: Icon(
          Icons.calendar_today,
          color: Colors.white,
          size: 30,
         ),
        ),
        Container(
         child: Padding(
          padding: EdgeInsets.all(8.0),
          child: Text(
           'Choose ${widget.optionalText} Date',
           style: TextStyle(
               color: Colors.white,
               fontStyle: FontStyle.italic,
               fontFamily: 'Montserrat',
               fontSize: 16),
          ),
         ),
        ),
       ],
      ),
     );
   }

   Future<void> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: selectedDate,
        firstDate: DateTime(2015, 8),
        lastDate: DateTime(2101));
    if (picked != null && picked != selectedDate)
     setState(() {
      selectedDate = picked;
     });
   }

  dateHyphenReplacer(date){
     date = formatDate(date, [mm, '/',dd,'/',yy]);
     return Text('$date', style: TextStyle(color: Colors.blue, fontSize: 20));
  }

  }



这是他们被称为的地方

              Container(
                  child: DatePicker(optionalText: "Start")
              ),
              SizedBox(height: 10),
              Container(
                child: DatePicker(optionalText: "End"),
              ),

标签: flutter

解决方案


这是因为 MainAxisAlignment.spaceBetween 和两个文本的长度不同,因此它似乎有不同的填充。使用 MainAxisAlignment.start 你就会明白了。

编辑:错字


推荐阅读