Как использовать разные наборы данных, используя одну и ту же функцию, передавая параметры в flutter?

#android #flutter #android-layout #flutter-layout #flutter-test

#Android #flutter #android-layout #flutter-layout #flutter-тест

Вопрос:

Сегодня я работал над проектом, и я столкнулся с трудностями при создании множества указателей даты с использованием одной функции в flutter. Код выглядит следующим образом

 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 amp;amp; 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),
        ],
      ),
    );
  }
}
  

Я хочу использовать функцию selectDateTime() для обоих средств выбора даты, но данные обоих средств выбора будут одинаковыми. Можете ли вы, пожалуйста, подсказать мне, как передать значение функции для двух средств выбора даты без написания двойных кодов для другого selectdate

Ответ №1:

Попробуйте мой код ниже :

 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 amp;amp; 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),
        ],
      ),
    );
  }
}
  

Комментарии:

1. Спасибо, сэр, не могли бы вы сказать мне, как мне выполнить операцию сложения между этими двумя средствами выбора даты?

2. Спасибо, что направили меня. Я сделал то же самое, что вы сказали. Ждем вашего ответа. Еще раз спасибо, сэр