由于某种原因,我一直无法显示showDateRangePicker
在一个对话框小部件,我确实尝试了很多方法,但不断得到一些奇怪的Future<DateTimepicker?>
错误,现在showDateRangePicker使用整个屏幕,我认为有一个
这是它的代码
Future<void> openDetail(PlutoCell? cell, String field, String userId) async {
print('inside openDetail');
final DateTimeRange? picked = await showDateRangePicker(
context: context,
initialDateRange: _dateRange,
firstDate: DateTime.now(),
lastDate: DateTime.now().add(const Duration(days: 90)),
);
if (picked != null && picked != _dateRange) {
setState(() {
_dateRange = picked;
});
}
final String date = _dateRange.start.toString().substring(0, 10);
final String date2 = _dateRange.end.toString().substring(0, 10);
final String dateRange = '$date - $date2';
}
}
字符串
这是完整的代码
class Leave extends StatefulWidget {
const Leave({super.key});
@override
State<Leave> createState() => _LeaveState();
}
class _LeaveState extends State<Leave> {
PlutoGridStateManager? _stateManager;
DateTimeRange _dateRange = DateTimeRange(
start: DateTime.now(),
end: DateTime.now().add(const Duration(days: 90)),
);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColor,
body: DefaultTabController(
length: 3,
child: Column(
children: [
const TabBar(
tabs: [
Tab(text: 'Captain X Leave'),
Tab(text: 'First Officer Leave'),
Tab(text: 'Cabin Crew Leave'),
],
indicatorColor: Color.fromARGB(255, 102, 249, 4),
indicatorSize: TabBarIndicatorSize.label,
),
Expanded(
child: TabBarView(
children: [
_buildTable(CAPTAIN_DATA),
_buildTable(FIRST_OFFICER_DATA),
_buildTable(CABIN_CREW_DATA),
],
),
),
],
),
),
);
}
Widget _buildTable(List<Map<String, String>> data) {
return PlutoGrid(
columns: [
PlutoColumn(
frozen: PlutoColumnFrozen.start,
title: 'NAME',
field: 'name',
type: PlutoColumnType.text(),
width: 200,
),
...List.generate(
10,
(index) => PlutoColumn(
title: 'Leave ${index + 1}',
field: 'leave${index + 1}',
type: PlutoColumnType.text(),
width: 100,
),
),
],
rows: List.generate(
data.length,
(index) => PlutoRow(
cells: {
'name': PlutoCell(value: data[index]['NAME']!),
...Map.fromIterable(
List.generate(
10,
(index) => 'leave${index + 1}',
),
value: (_) => PlutoCell(value: '')),
},
),
),
mode: PlutoGridMode.selectWithOneTap,
onSelected: (event) {
print('inside onSelected');
dynamic userId = 'yo';
openDetail(event.cell, event.cell!.column.field, userId);
},
onChanged: (event) {
print('onchanged');
},
onLoaded: (PlutoGridOnLoadedEvent event) {
_stateManager = event.stateManager;
});
}
Future<void> openDetail(PlutoCell? cell, String field, String userId) async {
print('inside openDetail');
final DateTimeRange? picked = await showDateRangePicker(
context: context,
initialDateRange: _dateRange,
firstDate: DateTime.now(),
lastDate: DateTime.now().add(const Duration(days: 90)),
);
if (picked != null && picked != _dateRange) {
setState(() {
_dateRange = picked;
});
}
final String date = _dateRange.start.toString().substring(0, 10);
final String date2 = _dateRange.end.toString().substring(0, 10);
final String dateRange = '$date - $date2';
}
}
型
当然也有一些软件包,但我不想使用它们,我只是想看看我做错了什么?
1条答案
按热度按时间nzk0hqpo1#
要修改
showDateRangePicker
,你必须使用它的builder
属性。这里已经给出了详细的解释Flutter Make showDateRangePicker Smaller。我在下面添加了一个小例子,它限制了
showDateRangePicker
的大小。完整代码:-
字符串
输出:-
x1c 0d1x的数据