Как вернуть значение внутри застройщика? [Флаттер] - PullRequest
0 голосов
/ 21 октября 2019

Мое приложение имеет PageView.builder, которое отображает страницы на основе дат (например, начальная страница будет установлена ​​на DateTime.now()), и когда пользователь проведет пальцем влево или вправо, оно изменит страницу и отображаемую дату соответственно.

У меня также есть календарь, и я хочу, чтобы он позволял пользователям переходить на страницу, которую они выбирают в календаре. Выбранная дата присутствует внутри builder здесь:

 selectedDayBuilder: (context, date, _) { //need to return date
//          var value = MonthPageViewExample(date);
          return FadeTransition(
            opacity: Tween(begin: 0.0, end: 1.0).animate(_animationController),
            child: Container(
              margin: const EdgeInsets.all(4.0),
              padding: const EdgeInsets.only(top: 5.0, left: 6.0),
              color: Colors.deepOrange[300],
              width: 100,
              height: 100,
              child: Text(
                  '${date.day}',
                  style: TextStyle().copyWith(fontSize: 16.0),
                ),
                ),
          );
        },

Я хочу использовать дату в качестве параметра, который будет передан на PageView.builder, а затем отобразится страница с выбранной датой. на экране.

Могу ли я получить некоторые рекомендации о том, как я могу сохранить значение даты внутри параметра (возможно), чтобы я мог передать его в PageView.builder?

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

1 Ответ

0 голосов
/ 24 октября 2019

Я использовал временное решение для этого вопроса, используя глобальную переменную. Я определил переменную как DateTime universal = DateTime.now(). Я передал эту переменную внутри selectedDayBuilder следующим образом:

   selectedDayBuilder: (context, date, _) {
          Calendar_screen(dateToString(date));
          universal = date;   // Selected date is assigned the user selected value here
          return FadeTransition(
            opacity: Tween(begin: 0.0, end: 1.0).animate(_animationController),
            child: Container(
              margin: const EdgeInsets.all(4.0),
              padding: const EdgeInsets.only(top: 5.0, left: 6.0),
              color: Colors.deepOrange[300],
              width: 100,
              height: 100,
              child: GestureDetector(
                onDoubleTap: () async{
                  final PageRouteBuilder _route = PageRouteBuilder(
                      pageBuilder: (BuildContext context, _, __) {
                    return DayPageViewExample(date);
                  });
                  await Navigator.pushAndRemoveUntil(context, _route, (Route<dynamic> r) => false);
                },
                child: Text(
                    '${date.day}',
                    style: TextStyle().copyWith(fontSize: 16.0),
                  ),
              ),
                ),
          );
        },

Я могу передать DateTime universal любому другому виджету, присутствующему на этом экране, и он успешно передает дату, выбранную внутри selectedDayBuilder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...