@beduin01

Как установить значение виджета в GetX?

Вопрос вот какой. Есть виджет, но контроллер в нем не доступен снаружи.
Не могу разобраться как с использованием GetX установить значение этого самого виджета т.к. он подразумевает обработку события onChange.
Как быть в таких случаях? Я сделал минимальный пример.

Сделал небольшой копи-паст пример:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:web_date_picker/web_date_picker.dart';

void main() {
  Get.put(SearchFormController());
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'GetX Demo',
      home: MyHomePage(),
    );
  }
}

class SearchFormController extends GetxController {
  var endDate = Rxn<DateTime?>();

  setToNow() { // хочу чтобы вызов этого метода устанавливал значение в виджете
    endDate.value = DateTime.now();
    print('setToNow event: ${endDate.value}');
  }
}

class MyHomePage extends StatelessWidget {
  var ctrl = Get.find<SearchFormController>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Row(
        children: [
          Obx(() => SizedBox(
                width: 160,
                child: WebDatePicker(
                  initialDate: ctrl.endDate.value,
                  onChange: (value) {
                    if (value != null) {
                      ctrl.endDate.value = value;
                      print('onChange event: ${ctrl.endDate.value}');
                    }
                  },
                ),
              )),
          ElevatedButton(
            onPressed: () {
              ctrl.setToNow();
            },
            child: Text("Set Date"),
          ),
        ],
      ),

    );
  }
}


pubspec.yaml:
dependencies:
  flutter:
    sdk: flutter
  web_date_picker: ^1.0.0+3
  get: ^4.6.5


Код виджета: https://github.com/duchdtran/web_date_picker/blob/...
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Neonoviiwolf
Flutter developer
есть несколько вариантов, вот к примеру
передавать stream(или коллбек или future) в SearchFormController, который слушает необходимый виджет StreamBuilder(как пример для стрима).
Или в самом SearchFormController держать стрим, который передавать в StreamBuilder.
По коду трудно понять вашу архитектуру, но думаю может пригодиться
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы