Функция поиска в панели приложений вызывает исключение

#flutter #exception #flutter-layout #android-appbarlayout #flutter-appbar

Вопрос:

Я пытаюсь реализовать функцию поиска в панели приложений, но продолжаю получать это исключение. Я понятия не имею, что здесь не так. Все работает нормально, если я удаляю текстовое поле или использую любой другой виджет, кроме текстового поля или текстового поля. Например, если я использую другой текстовый виджет вместо поля TextFormField, то он отлично работает. Проблема заключается только в текстовом поле. Что мне делать?

Исключение:

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

Что я хочу заархивировать:

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

Мой код:

 import 'package:flutter/material.dart';  import 'package:get/get.dart';  import 'package:votefun/Menu/main_menu_shop.dart';  import 'package:votefun/Menu/main_menu_user.dart';  import 'package:votefun/Menu/main_menu_visiter.dart';  import 'package:votefun/Utils/app_pages.dart';    class MyAppBar extends StatelessWidget with PreferredSizeWidget {  @override  final Size preferredSize;  final String title;  final bool drawer;  final int drawerNumber;  final bool search;  final String hint;    MyAppBar(  {Key? key,  required this.title,  required this.drawer,  required this.drawerNumber,  required this.search,  required this.hint})  : preferredSize = const Size.fromHeight(50.0),  super(key: key);    @override  Widget build(BuildContext context) {  return SafeArea(  child: ClipPath(  clipper: MyClipper(),  child: Container(  decoration: const BoxDecoration(  color: Colors.white,  ),  //width: double.infinity,  height: 55,  child: Material(  elevation: 20,  child: Row(  children: [  const SizedBox(  width: 8.0,  ),  Visibility(  visible: (drawer == true) ? false : true,  child: IconButton(  onPressed: () {  Navigator.pop(context);  },  icon: const Icon(Icons.arrow_back_ios)),  ),  Visibility(  visible: (drawer == true) ? true : false,  child: IconButton(  onPressed: () {  if (drawerNumber == 1)  (Navigator.of(context).push(PageRouteBuilder(  opaque: false,  pageBuilder: (BuildContext context, _, __) =gt;  MainMenuUser())));  else if (drawerNumber == 2)  (Navigator.of(context).push(PageRouteBuilder(  opaque: false,  pageBuilder: (BuildContext context, _, __) =gt;  MainMenuShop())));  else {  Navigator.of(context).push(PageRouteBuilder(  opaque: false,  pageBuilder: (BuildContext context, _, __) =gt;  MainMenuVisiter()));  }  },  icon: const Icon(Icons.menu)),  ),  Visibility(visible: (search == true) ? false : true,  child: Expanded(  child: Text(  title,  style: const TextStyle(  fontSize: 17, fontWeight: FontWeight.bold),  ),  ),  ),  Visibility(visible: (search == true) ? true : false,  child:   TextFormField(decoration: InputDecoration(hintText: 'hint'),  maxLines: 1,  minLines: 1,),  ),  Container(  padding: const EdgeInsets.only(right: 5),  child: IconButton(  onPressed: () {  Get.offAllNamed(Routes.SignIn);  },  icon: Image.asset('images/homeicon.png')))  ],  ),  ),  ),  ),  );  }  }    class MyClipper extends CustomClipperlt;Pathgt; {  @override  Path getClip(Size size) {  var path = Path();  path.lineTo(0.0, size.height);  path.lineTo(size.width, size.height / 1.18);  path.lineTo(size.width, 0.0);  path.close();  return path;  }    @override  bool shouldReclip(covariant CustomClipperlt;Pathgt; oldClipper) {  return false;  }  }  

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

1. Вы можете показать журнал

Ответ №1:

Я понял, причиной исключения была неограниченная ширина текстового поля.