Row 内的 TextField 破坏了代码

TextField inside of Row it broke the code

我正在尝试制作自定义搜索小部件。当我在 Row 中添加 TextField 时,它破坏了代码。

我的代码没有 TextField。

import 'package:flutter/material.dart';

class SearchWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.yellowAccent,
        borderRadius: BorderRadius.circular(500),
      ),
      child: Row(
        children: [
          Container(
            decoration: BoxDecoration(
              color: Colors.redAccent,
              borderRadius: BorderRadius.circular(500),
            ),
            child: IconButton(icon: Icon(Icons.search), onPressed: () {}),
          ),
        ],
      ),
    );
  }
}

但添加 TextField 后一切都会发生。

我的代码在 Row 中包含 TextField。

import 'package:flutter/material.dart';

class SearchWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.yellowAccent,
        borderRadius: BorderRadius.circular(500),
      ),
      child: Row(
        children: [
          Container(
            decoration: BoxDecoration(
              color: Colors.redAccent,
              borderRadius: BorderRadius.circular(500),
            ),
            child: IconButton(icon: Icon(Icons.search), onPressed: () {}),
          ),
          TextField(
            decoration: InputDecoration(
              labelText: "جستجو",
            ),
          ),
        ],
      ),
    );
  }
}

我在其他情况下也遇到过这个问题,我认为是行和列的问题。

试试这个方法

您需要将 TextField 包裹在 Expanded 小部件中

class SearchWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.yellowAccent,
        borderRadius: BorderRadius.circular(500),
      ),
      child: Row(
        children: [
          Container(
            decoration: BoxDecoration(
              color: Colors.redAccent,
              borderRadius: BorderRadius.circular(500),
            ),
            child: IconButton(icon: Icon(Icons.search), onPressed: () {}),
          ),
          Expanded(
            child: TextField(
              decoration: InputDecoration(
                labelText: "جستجو",
              ),
            ),
          ),
        ],
      ),
    );
  }
}

我认为您甚至不需要 Container 来创建一个圆形矩形文本字段,因为 textField 具有 enableBorder、disableBorder 和 border 作为其属性以使其边框为圆形,并且您可以 suffix/prefix IconButton对于搜索实现,但如果你想用容器实现它,我有一个类似的代码:

 Row(
            children: [
              Expanded(
                child: Container(
                  decoration: BoxDecoration(
                      color: Colors.white,
                      borderRadius: BorderRadius.circular(24)),
                  child: TextFormField(
                    autovalidate: true,
                    autocorrect: true,
                    textInputAction: TextInputAction.search,
                    onFieldSubmitted: (val) {
                      _search();
                    },
                    onChanged: (val) {
                     // Your Code
                    },
                    controller: _controller,
                    decoration: InputDecoration(
                        hintText: 'Search',
                        contentPadding: const EdgeInsets.only(left: 24.0),
                        border: InputBorder.none),
                  ),
                ),
              ),
              IconButton(
                  icon: Icon(
                    Icons.search,
                    color: Colors.white,
                  ),
                  onPressed: () {
                    _search();
                  })
            ],
          ),

如果您需要 TextField 圆形边框代码,请告诉我,我们很乐意为您提供帮助