#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:
Я понял, причиной исключения была неограниченная ширина текстового поля.