Я новичок в трепете. Я добавил форму с текстовым полем, и когда я щелкнул текстовое поле и появилась клавиатура, текстовое поле поднялось.
Это мой код:
Widget build(BuildContext context) {
MediaQueryData mediaQuery = MediaQuery.of(context);
return new Scaffold(
body: new Container(
color: Colors.purple,
constraints: new BoxConstraints.expand(),
padding: EdgeInsets.only(top: 10.0,left: 10.0,right: 10.0, bottom: mediaQuery.viewInsets.bottom, ),
child: SingleChildScrollView(
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(height: 12.0),
Text(
'What is your Business Name?',
style: TextStyle(fontSize: 24.0),
),
AppForm(),
],
),
padding: EdgeInsets.only(left: 10.0,right: 10.0, bottom: mediaQuery.viewInsets.bottom),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(30.0)),
color: Colors.white,
),
)
)
),
);
}
Это результат без открытия клавиатуры: Изображение без клавиатуры
Это изображение после открытия клавиатуры: Изображение после открытия клавиатуры
Вот мой вывод доктора трепетания.
Doctor summary (to see all details, run flutter doctor -v): [√] Flutter
(Channel beta, v0.5.1, on Microsoft Windows [Version 10.0.17134.165], locale
en-US) [√] Android toolchain - develop for Android devices (Android SDK
28.0.0) [√] Android Studio (version 3.1) [!] VS Code, 64-bit edition (version
1.25.1) [!] Connected devices ! No devices available ! Doctor found issues in
2 categories.
есть идеи, как это исправить?
Вот мой вывод доктора трепетания. Краткое описание доктора (чтобы увидеть все подробности, запустите flutter doctor -v): [√] Flutter (бета-версия канала, v0.5.1, в Microsoft Windows [версия 10.0.17134.165], локаль en-US) [√] Набор инструментов Android - разработка для Устройства Android (Android SDK 28.0.0) [√] Android Studio (версия 3.1) [!] VS Code, 64-битная версия (версия 1.25.1) [!] Подключенные устройства! Нет доступных устройств! Врач обнаружил проблемы в 2 категориях.
Я бы порекомендовал вам перейти к мастеру флаттера каналов flutter channel master, который в настоящее время находится на v5.7, а также очистить свой проект с помощью flutter clean и Invalidate caches and restart.
Видел это ?? didierboelens.com/2018/04/…
Так было со мной. Вы определенно оборачиваете помост внутри другого помоста. внутри вашего приложения flutter должен быть только один виджет каркаса, то есть основной макет. Просто удалите все имеющиеся у вас предки каркаса и оставьте только один каркас. не заворачивайте строительные леса в другие леса. Несмотря на это, вы можете завернуть строительные леса в контейнер.
Убедитесь, что в вашем файле main.dart вы этого не делаете: -
✖✖
return Scaffold(
body : YourNewFileName(),
);
Несмотря на приведенный выше код, сделайте следующее: - ✔✔
return YourNewFileName();
@Nirodya Gamage, не могли бы вы опубликовать файл main.dart, чтобы я мог проверить, где ошибка ??
Мне очень жаль, что вы правы! Я нашел еще один эшафот на заднем плане. Я удалил один, и он работает. Огромное спасибо!
Отлично . Потому что то же самое случилось со мной, и вот как я решил это.
У меня есть подмости внутри подмостей. Мне требуется добавить Tabbarview. Какое решение для этого.
Панель вкладок также может быть добавлена с помощью одного Scaffold @dominic_torreto. На данный момент наличие каркаса внутри каркаса дает вам некоторые ошибки, подобные этой. поэтому вам следует изменить структуру, с помощью которой вы разрабатываете свое приложение.
Да. Меняет структуру. Даже несмотря на то, что это не работает.
new Scaffold(
appBar: new AppBar(
...
resizeToAvoidBottomPadding: true,
....
Исправлена проблема, когда текстовое поле было скрыто клавиатурой
по умолчанию это попытка и не работает
resizeToAvoidBottomPadding устарел
используйте вместо resizeToAvoidBottomInset: true
Это прекрасно работает. Установка resizeToAvoidBottomInset: true для Scaffold отрегулирует вид, чтобы он находился в области над вашей клавиатурой.
resizeToAvoidBottomInset по умолчанию имеет значение true. не нужно добавлять это
Этот ответ не относится к указанному выше вопросу, но может быть полезен тем, у кого все еще возникают проблемы с клавиатурой, закрывающей выбранное текстовое поле, независимо от того, что они делают. Я попал на эту страницу, пытаясь решить такую проблему.
До возникновения проблемы я вносил некоторые изменения, чтобы попытаться улучшить экран-заставку при запуске приложения. По чьей-то рекомендации я включил следующую строку в раздел <resources><style> файла styles.xml в папке android / app / src / main / res / values.
<item name = "android:windowFullscreen">true</item>
Это привело к неожиданному эффекту остановки прокрутки любых полей в главном приложении при отображении клавиатуры. Для кого-то это могло быть очевидно, но не для меня.
Надеюсь, эта информация кому-то поможет.
Спасибо, что помогло
Спасибо. Я трачу много времени на поиски этой проблемы, и ничего не работает. Но я не понимаю, почему полноэкранный режим вызывает эту ошибку.
Большое вам спасибо, я перепробовал все трюки с виджетами, но ничего не вышло.
Большое спасибо тебе, чувак. Я просто сделал все необходимое, чтобы исправить это, и просто понял, что он работает, до реализации заставки.
Это устранило мою проблему во всем приложении
Рад, что это помогло вам, ребята. :-)
ОМГ СПАСИБО !!
Это устраняет эту проблему, но вызывает другие проблемы, если у вас есть верхний баннер. Строка состояния отображается (это одна), и это делается поверх баннера.
Вы можете просто обернуть виджет, который вы не хотите скрывать клавиатурой, внутри отступа, как показано ниже:
Padding(
child: YourWidget()
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom));
Просто вырежьте и вставьте свой код тела в это -
SingleChildScrollView(
child: Stack(
children: <Widget>[
// your body code
],
),
),
был такой же вопрос получил ответ здесь
Если вы используете Scaffold, то оборачивайте корпус SingleChildScrollView
Например, вот так:
...
return Scaffold(
body: SingleChildScrollView(
child: Column(
children: <Widget>[
TextField(),
TextField(),
TextField(),
],
),
),
);
...
это было для меня действительно палочкой-выручалочкой. Теперь эшафот станет прокручиваемым.
Исправление для меня было похоже на ответ GrahamD.
Я объявлял свою тему, используя родительский элемент с расширением .Fullscreen, например:
<style name = "NormalTheme" parent = "@android:style/Theme.Black.NoTitleBar.Fullscreen">
<item name = "android:windowBackground">@android:color/white</item>
</style>
Я поднял вопрос с командой Flutter, потому что должна быть возможность использовать полноэкранную тему и иметь нормальное поведение приложения чата.
<item name = "android:windowFullscreen">true</item>
Удаление строки выше из
android/app/src/main/res/values/styles.xml
сделал мое приложение фиксированным для автоматической прокрутки поля ввода вверх, чтобы его можно было увидеть на клавиатуре открывается
спасибо @GrahamD
У меня тоже была эта проблема. Эта строка была добавлена в результате использования пакета flutter_native_splash. Не думаю, что я когда-нибудь нашел бы это. Спасибо.
Спасибо за это. У меня была такая же проблема из-за flutter_native_splash
Это устраняет эту проблему, но вызывает другие проблемы, если у вас есть верхний баннер. Строка состояния отображается (это одна), и это делается поверх баннера.
Я решил вышеупомянутую проблему, добавив Stack() в качестве тела моего Scaffold(), это позволяет объекту TextField() скользить вверх над виртуальной клавиатурой. Изначально я использовал SingleChildScrollView() для тела, в результате чего объекты TextField() были закрыты мягкой клавиатурой.
Решение, которое сработало для меня:
child: Scaffold(
resizeToAvoidBottomInset: true,
body: Stack(
children: <Widget>[]
Вы должны добавить SingleChildScroolView в свой Scaffold и добавить обратное: правда в свой SingleChildScroolView
Scaffold(
body: SingleChildScrollView(
reverse: true,
child: Container()));
У меня была такая же проблема, я также использовал SingleChildScrollView, но это не решило мою проблему.
Моя проблема возникла в этом коде.
Stack(
childern:[
SingleChildScrollView(),// In scollView i have textFeild when keyboard opens doneButton hide the textFeild.
doneButtonWidget()//this button align with the bottom of the screen.
]
)
Чтобы решить проблему, я следую этому, и это решило мою проблему.
Column(
childern:[
Expaned(
child:SingleChildScrollView(),// In scollView i have textFeild when keyboard opens doneButton hide the textFeild.
flex:1
),
doneButtonWidget()//this button align with the bottom of the screen.
]
)
resizeToAvoidBottomInset по умолчанию имеет значение true.
return Scaffold ( resizeToAvoidBottomInset: ложь,
Я установил значение false, и он работал нормально
Согласно обновлениям флаттера (2021 г.), «resizeToAvoidBottomInset: true» выдает ошибку желто-черной полосы при появлении клавиатуры.
Вот как я исправил указанную выше проблему:
У вас последняя версия флаттера? Что говорит
flutter doctor?