Android 如何通过在颤振中传递参数来使用使用相同函数的不同数据选择器?
今天我在做一个项目,我发现很难在flifter中使用一个函数来创建很多日期选择器。代码如下Android 如何通过在颤振中传递参数来使用使用相同函数的不同数据选择器?,android,flutter,android-layout,flutter-layout,flutter-test,Android,Flutter,Android Layout,Flutter Layout,Flutter Test,今天我在做一个项目,我发现很难在flifter中使用一个函数来创建很多日期选择器。代码如下 import 'dart:ffi'; import 'package:AllInOneCalci/customAppBar.dart'; import 'package:flutter/material.dart'; class AgeCalcUI extends StatelessWidget { @override Widget build(BuildContext context) {
import 'dart:ffi';
import 'package:AllInOneCalci/customAppBar.dart';
import 'package:flutter/material.dart';
class AgeCalcUI extends StatelessWidget {
@override
Widget build(BuildContext context) {
var AppBarHeight = MediaQuery.of(context).size.height;
return Scaffold(
appBar: customAppBar(
height: (AppBarHeight / 3) * 0.4,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(top: 18.0),
child: Text(
'All In One Cali',
style: TextStyle(
color: Colors.black,
fontSize: 35.0,
fontFamily: 'DancingScript',
fontWeight: FontWeight.bold),
),
),
],
),
),
body: CustomDatePicker(),
);
}
}
class CustomDatePicker extends StatefulWidget {
@override
_CustomDatePickerState createState() => _CustomDatePickerState();
}
class _CustomDatePickerState extends State<CustomDatePicker> {
//getting the current date
DateTime selectedDate = DateTime.now();
Future<void> selectDateTime(BuildContext context) async {
final DateTime chosen = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(1700),
lastDate: DateTime(2030),
initialDatePickerMode: DatePickerMode.year,
);
if (chosen != null && chosen != selectedDate) {
setState(() {
selectedDate = chosen;
});
}
}
//widget for displaying and choosing date onTap
Widget CustomButtonDatePicker(Color ButtonColor, Color TextColor) {
return Column(
children: [
Text(
"${selectedDate.toLocal()}".split(' ')[0],
style: TextStyle(
color: TextColor,
fontSize: 30.0,
fontFamily: 'DancingScript',
fontWeight: FontWeight.bold,
),
),
Padding(
padding: const EdgeInsets.only(top: 18.0),
child: MaterialButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),
elevation: 10.0,
onPressed: () {
selectDateTime(context);
},
color: ButtonColor,
child: Text(
'Select',
style: TextStyle(
fontSize: 15.0,
color: Colors.white,
),
),
),
),
],
);
}
@override
Widget build(BuildContext context) {
return Container(
height: (MediaQuery.of(context).size.height) / 2,
alignment: Alignment.center,
child: Column(
children: [
Spacer(),
CustomButtonDatePicker(Colors.redAccent, Colors.cyan[200]),
Spacer(),
CustomButtonDatePicker(Colors.cyan[200], Colors.redAccent),
],
),
);
}
}
导入'dart:ffi';
进口“包装:AllInOneCalci/customAppBar.dart”;
进口“包装:颤振/材料.省道”;
类AgeCalcUI扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
var AppBarHeight=MediaQuery.of(context).size.height;
返回脚手架(
appBar:customAppBar(
高度:(AppBarHeight/3)*0.4,
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
填充物(
填充:仅限常量边集(顶部:18.0),
子:文本(
“一应俱全”,
样式:TextStyle(
颜色:颜色,黑色,
字体大小:35.0,
fontFamily:“DancingScript”,
fontWeight:fontWeight.bold),
),
),
],
),
),
正文:CustomDatePicker(),
);
}
}
类CustomDatePicker扩展StatefulWidget{
@凌驾
_CustomDatePickerState createState()=>_CustomDatePickerState();
}
类_CustomDatePickerState扩展状态{
//获取当前日期
DateTime selectedDate=DateTime.now();
Future selectDateTime(构建上下文上下文)异步{
选择的最终日期时间=等待showDatePicker(
上下文:上下文,
初始日期:selectedDate,
firstDate:DateTime(1700),
最后日期:日期时间(2030年),
initialDatePickerMode:DatePickerMode.year,
);
if(selected!=null&&selected!=selectedDate){
设置状态(){
selectedDate=已选择;
});
}
}
//用于显示和选择日期onTap的小部件
小部件CustomButtonDepicker(颜色按钮颜色、颜色文本颜色){
返回列(
儿童:[
正文(
“${selectedDate.toLocal()}”.split(“”)[0],
样式:TextStyle(
颜色:TextColor,
字体大小:30.0,
fontFamily:“DancingScript”,
fontWeight:fontWeight.bold,
),
),
填充物(
填充:仅限常量边集(顶部:18.0),
子:材质按钮(
形状:圆形矩形边框(
边界半径:边界半径。圆形(20.0)),
标高:10.0,
已按下:(){
选择DateTime(上下文);
},
颜色:纽扣颜色,
子:文本(
“选择”,
样式:TextStyle(
字体大小:15.0,
颜色:颜色,白色,
),
),
),
),
],
);
}
@凌驾
小部件构建(构建上下文){
返回容器(
高度:(MediaQuery.of(context.size.height)/2,
对齐:对齐.center,
子:列(
儿童:[
垫片(),
CustomButtonDepicker(Colors.redAccent,Colors.cyan[200]),
垫片(),
CustomButtonDepicker(Colors.cyan[200],Colors.redAccent),
],
),
);
}
}
我想对两个日期选择器使用函数selectDateTime(),但两个选择器的数据将相同。您能否建议我如何传递两个日期选择器的函数值,而不为另一个selectdate写入双代码请尝试下面的代码:
class AgeCalcUI extends StatelessWidget {
@override
Widget build(BuildContext context) {
var AppBarHeight = MediaQuery.of(context).size.height;
return Scaffold(
appBar: AppBar(
title: Text("All In One Cali"),
),
body: CustomDatePicker(),
);
}
}
enum DateSelection { first, second }
class CustomDatePicker extends StatefulWidget {
@override
_CustomDatePickerState createState() => _CustomDatePickerState();
}
class _CustomDatePickerState extends State<CustomDatePicker> {
//getting the current date
DateTime selectedDateFirst = DateTime.now();
DateTime selectedDateSecond = DateTime.now();
DateTime selectedDate = DateTime.now();
Future<void> selectDateTime(
BuildContext context, DateSelection dateSelection) async {
final DateTime chosen = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(1700),
lastDate: DateTime(2030),
initialDatePickerMode: DatePickerMode.year,
);
if (chosen != null && chosen != selectedDate) {
setState(() {
switch (dateSelection) {
case DateSelection.first:
selectedDateFirst = chosen;
break;
case DateSelection.second:
selectedDateSecond = chosen;
break;
}
});
}
}
//widget for displaying and choosing date onTap
Widget CustomButtonDatePicker(
DateSelection dateSelection, Color ButtonColor, Color TextColor) {
return Column(
children: [
Text(
dateSelection == DateSelection.first
? "${selectedDateFirst.toLocal()}".split(' ')[0]
: "${selectedDateSecond.toLocal()}".split(' ')[0],
style: TextStyle(
color: TextColor,
fontSize: 30.0,
fontFamily: 'DancingScript',
fontWeight: FontWeight.bold,
),
),
Padding(
padding: const EdgeInsets.only(top: 18.0),
child: MaterialButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),
elevation: 10.0,
onPressed: () {
selectDateTime(context, dateSelection);
},
color: ButtonColor,
child: Text(
'Select',
style: TextStyle(
fontSize: 15.0,
color: Colors.white,
),
),
),
),
],
);
}
@override
Widget build(BuildContext context) {
return Container(
height: (MediaQuery.of(context).size.height) / 2,
alignment: Alignment.center,
child: Column(
children: [
Spacer(),
CustomButtonDatePicker(
DateSelection.first, Colors.redAccent, Colors.cyan[200]),
Spacer(),
CustomButtonDatePicker(
DateSelection.second, Colors.cyan[200], Colors.redAccent),
],
),
);
}
}
class AgeCalcUI扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
var AppBarHeight=MediaQuery.of(context).size.height;
返回脚手架(
appBar:appBar(
标题:文本(“一体化Cali”),
),
正文:CustomDatePicker(),
);
}
}
枚举日期选择{first,second}
类CustomDatePicker扩展StatefulWidget{
@凌驾
_CustomDatePickerState createState()=>_CustomDatePickerState();
}
类_CustomDatePickerState扩展状态{
//获取当前日期
DateTime selectedDateFirst=DateTime.now();
DateTime selectedDateSecond=DateTime.now();
DateTime selectedDate=DateTime.now();
未来选择日期时间(
BuildContext上下文,日期选择(DateSelection)异步{
选择的最终日期时间=等待showDatePicker(
上下文:上下文,
初始日期:selectedDate,
firstDate:DateTime(1700),
最后日期:日期时间(2030年),
initialDatePickerMode:DatePickerMode.year,
);
if(selected!=null&&selected!=selectedDate){
设置状态(){
开关(日期选择){
case DateSelection.first:
selectedDateFirst=已选择;
打破
case DateSelection.second:
selectedDateSecond=已选择;
打破
}
});
}
}
//用于显示和选择日期onTap的小部件
小部件自定义按钮生成器(
日期选择日期选择,颜色按钮颜色,颜色文本颜色){
返回列(
儿童:[
正文(
dateSelection==dateSelection.first
?“${selectedDateFirst.toLocal()}”.split(“”)[0]
:“${selectedDateSecond.toLocal()}”.split(“”)[0],
样式:TextStyle(
颜色:TextColor,
字体大小:30.0,
fontFamily:“DancingScript”,
fontWeight:fontWeight.bold,
),
),
填充物(
填充:仅限常量边集(顶部:18.0),
子:材质按钮(
形状:圆形矩形边框(
边界半径:边界半径。圆形(20.0)),
标高:10.0,
已按下:(){
选择日期时间(上下文、日期选择);
},
颜色:纽扣颜色,
子:文本(
“选择”,
样式:TextStyle(
字体大小:15.0,
颜色:颜色,白色,
),
),
),
),
],