Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何通过在颤振中传递参数来使用使用相同函数的不同数据选择器?_Android_Flutter_Android Layout_Flutter Layout_Flutter Test - Fatal编程技术网

Android 如何通过在颤振中传递参数来使用使用相同函数的不同数据选择器?

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) {

今天我在做一个项目,我发现很难在flifter中使用一个函数来创建很多日期选择器。代码如下

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,
颜色:颜色,白色,
),
),
),
),
],