У меня есть функция, которая позволяет мне показывать дату выбора с помощью нажатия кнопки. Когда я нажимаю кнопку, я получаю это нижнее переполнение
3 ответа
Я решил эту проблему с этим постом: https://github.com/flutter/flutter/issues/19744
Я в основном убрал из этого нижнюю часть OK
и CANCEL
и добавил, чтобы при выборе даты автоматически нажимать на DATE
на указателе даты.
В вашем datepicker.dart:
void _handleYearChanged(DateTime value) {
_vibrate();
setState(() {
_mode = DatePickerMode.day;
_selectedDate = value;
Navigator.pop(context, _selectedDate); //new
});
}
void _handleDayChanged(DateTime value) {
_vibrate();
setState(() {
_selectedDate = value;
Navigator.pop(context, _selectedDate); //new
});
}
Я прокомментировал строки 995 и 1017, в которые вы вставляете action
switch (orientation) {
case Orientation.portrait:
return new SizedBox(
width: _kMonthPickerPortraitWidth,
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
header,
new Container(
color: theme.dialogBackgroundColor,
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
picker,
//actions,
],
),
),
],
),
);
case Orientation.landscape:
return new SizedBox(
height: _kDatePickerLandscapeHeight,
child: new Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
header,
new Flexible(
child: new Container(
width: _kMonthPickerLandscapeWidth,
color: theme.dialogBackgroundColor,
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[picker] //, actions],
),
),
),
],
),
);
}
На мой взгляд, нам не нужны кнопка ОТМЕНА и кнопка ОК.
Я тоже получил эту проблему, но нашел решение. Просто заверните с FittedBox.
Future<Null> selecionarData() async {
//dataSelecionada is a final DateTime
dataSelecionada = await showDatePicker(
context: context,
initialDate: dataAtual,
firstDate: DateTime(2019),
lastDate: DateTime(2022),
builder: (BuildContext context, Widget child) {
return FittedBox(
child: Theme(
child: child,
data: ThemeData(
primaryColor: Colors.purple[300],
),
),
);
});
}
Это известная проблема https://github.com/flutter/flutter/issues/18672а>
Есть предложение, но это не решает проблему:
Когда клавиатура появляется, ваше приложение, включая диалоговое окно, изменяется, чтобы освободить место для него. Это также произойдет, если вы изменили ориентацию устройства с книжной на альбомную.
Обтекание виджета диалога - того, который вы создаете с помощью параметра построителя showDialog - в SingleChildScrollView или ListView или ClipRect (согласно сообщению об ошибке) сделает его изменяемым.
Похожие вопросы
Новые вопросы
dart
Dart - это язык программирования, основанный на классах (статически и строго), для создания веб-приложений и мобильных приложений. Dart компилирует в современный JavaScript для запуска в браузере и компилирует в собственный код для запуска на мобильных платформах, таких как Android и iOS. Дарт также работает в командной строке для сценариев и приложений на стороне сервера.