Трепещите, Контур ввода скрывает одну сторону

#flutter

#трепетать

Вопрос:

Я создаю поле номера мобильного телефона, я хочу скрыть границу справа при выборе набора и скрыть границу слева в поле номера.

 border: OutlineInputBorder(  borderSide: BorderSide(  width: 1,  color: Color(0xFFF2F2F7),  )  ),  

введите описание изображения здесь

Ответ №1:

Вы должны настроить, обычно я использую Container() виджет для этой ситуации, обернуть TextField() Container() и украсить так, как вы хотите.

 class Homepage extends StatefulWidget {  const Homepage({Key key}) : super(key: key);   @override  _HomepageState createState() =gt; _HomepageState(); }  class _HomepageState extends Statelt;Homepagegt; {  @override  Widget build(BuildContext context) {  return Scaffold(  appBar: AppBar(  title: const Text('Homepage'),  backgroundColor: Colors.green,  ),  body: Container(  alignment: Alignment.center,  padding: const EdgeInsets.all(20),  child:Row(  children: [  Container(  padding: const EdgeInsets.only(right:10),  alignment: Alignment.centerRight,  height: 58.9,  width: 80,  decoration: BoxDecoration(  border: Border(  top: BorderSide(width: 1.0, color: Colors.black26),  left: BorderSide(width: 1.0, color: Colors.black26),  bottom: BorderSide(width: 1.0, color: Colors.black26),  ),  ),  child: Icon(Icons.arrow_drop_down),  ),  Expanded(  child: Container(  decoration: BoxDecoration(  border: Border(  top: BorderSide(width: 1.0, color: Colors.black26),  right: BorderSide(width: 1.0, color: Colors.black26),  bottom: BorderSide(width: 1.0, color: Colors.black26),  ),  ),  child: TextField(  decoration: InputDecoration(  hintText: "Phone number",  focusedBorder: InputBorder.none,  enabledBorder: InputBorder.none,  errorBorder: InputBorder.none,  disabledBorder: InputBorder.none,  border: OutlineInputBorder(  borderSide: BorderSide.none    )  )  ,  ),  ),  )    ],  )   ));  } }   

or

  class Homepage extends StatefulWidget {  const Homepage({Key key}) : super(key: key);   @override  _HomepageState createState() =gt; _HomepageState(); }  class _HomepageState extends Statelt;Homepagegt; {  @override  Widget build(BuildContext context) {  return Scaffold(  appBar: AppBar(  title: const Text('Homepage'),  backgroundColor: Colors.green,  ),  body: Container(  alignment: Alignment.center,  padding: const EdgeInsets.all(20),  child:   Container(  height: 55,  decoration: BoxDecoration(  border: Border.all(color:Colors.black26 )  ),  child: Row(  children: [  Container(  padding: const EdgeInsets.only(right:10),  alignment: Alignment.centerRight,  width: 80,  child: Icon(Icons.arrow_drop_down),  ),  Expanded(  child: TextField(  decoration: InputDecoration(  hintText: "Phone number",  focusedBorder: InputBorder.none,  enabledBorder: InputBorder.none,  errorBorder: InputBorder.none,  disabledBorder: InputBorder.none,  border: OutlineInputBorder(  borderSide: BorderSide.none    )  )  ,  )  )    ],  ),  )   ));  } }  

введите описание изображения здесь

Или используйте префикс текстового поля:

  class Homepage extends StatefulWidget {  const Homepage({Key? key}) : super(key: key);   @override  _HomepageState createState() =gt; _HomepageState(); }  class _HomepageState extends Statelt;Homepagegt; {    @override  Widget build(BuildContext context) {  return Scaffold(  appBar: AppBar(  title: const Text('Homepage'),  backgroundColor: Colors.green,  ),  body: Container(  alignment: Alignment.center,  padding: const EdgeInsets.all(20),  child: SingleChildScrollView(  child: Column(  mainAxisAlignment: MainAxisAlignment.center,  children: [  TextFormField(  decoration: InputDecoration(  prefixIcon: Container(  padding: const EdgeInsets.only(right: 10, left: 10),  alignment: Alignment.centerRight,  height: 55,  width: 80,  child: const Icon(Icons.arrow_drop_down)  ),    hintText: "Phone number",  errorText: "Password should contain more than 5 characters",  border:  const OutlineInputBorder(borderSide: BorderSide(color:Colors.black26 ))),  onChanged: (val) {},    ),   const SizedBox(height:20),   TextFormField(  decoration: InputDecoration(  prefixIcon: Container(  padding: const EdgeInsets.only(right: 10, left: 10),  alignment: Alignment.centerRight,  height: 55,  width: 80,  child: const Icon(Icons.person)  ),    hintText: "Name",    border:  const OutlineInputBorder(borderSide: BorderSide(color:Colors.black26 ))),  onChanged: (val) {},    ),  ],  ),  )    ));  } }  

введите описание изображения здесь

Комментарии:

1. есть два текстовых поля, с двумя проверками ошибок, если вы обернете контейнер, ошибка будет отображаться внутри контейнера, нехорошо

2. о да, я знаю, дай мне это исправить, Есть еще один способ.

3. теперь я обновил свой ответ , пожалуйста, проверьте

4. возможно, вы неправильно поняли мой вопрос, на самом деле существует два текстовых поля, одно из которых-выбор набора номера, другое-ввод номера телефона.

5. Хорошо , теперь я понял, вы используете какой-либо пакет для выбора страны или просто используете обычное текстовое поле для номера телефона?