Как назвать значение из кругового слайдера в флаттер? - PullRequest
0 голосов
/ 21 января 2020

Я только привыкаю к ​​флаттеру, и я использовал https://pub.dev/packages/sleek_circular_slider Пакет круговых слайдеров из пакетов флаттера, я создал свой макет и дал команду onChange. Слайдер работает нормально. Теперь я хочу использовать это значение слайдера в других моих методах ... Я пытался использовать много вещей, но это просто не работает. Пожалуйста, позвольте мне теперь, как вызвать значение из слайда и использовать его? Также есть параметр innerWidget, чьи документы говорят, что он выполняет работу, но я не знаю, как заставить ее работать ????

Вот `

class WeightSlider extends StatefulWidget {
  @override
  _State createState() => _State();
}

class _State extends State<WeightSlider> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: <Widget>[
          Center(child: slider),
        ],
      ),
    );
  }
  final slider = SleekCircularSlider(
    min: 0,
    max: 120.0,
    initialValue: 60,
    appearance: CircularSliderAppearance(
        size:279,
        startAngle: 120,
        angleRange: 300,
        animationEnabled: true,
        infoProperties: InfoProperties(
          bottomLabelText: 'kg',
          bottomLabelStyle: TextStyle(
            fontSize: 25,
          ),
          mainLabelStyle: TextStyle(
            fontSize: 70,
            fontFamily: 'RalewaySemiBold',
          ),
          modifier: (double value) {
            final roundedValue = value.ceil().toInt().toString();
            return '$roundedValue ';
          },
        ),
        customColors: CustomSliderColors(
          hideShadow: true,
          trackColor: Color(0XFFFFF176),
          dotColor: Color(0XFFFAFAFA),
          progressBarColor: Color(0XFF00E676),
        ),
        customWidths: CustomSliderWidths(
          trackWidth: 5,
          progressBarWidth: 20,
          handlerSize: 4,
        )
    ),
    onChangeEnd: (double weight){
      return weight;
    },
  );

  }

` my код ...

1 Ответ

0 голосов
/ 21 января 2020

Атрибут модификатора вызывается во время сборки, поэтому вы не можете установить состояние. Чтобы получить окончательное значение (когда пользователь поднимает палец), используйте onChangedEnd и onChange для каждого шага.

import 'package:flutter/material.dart';
import 'package:sleek_circular_slider/sleek_circular_slider.dart';

class WeightSlider extends StatefulWidget {
  @override
  _State createState() => _State();
}

class _State extends State<WeightSlider> {
  double myValue;
  @override
  void initState() {
    super.initState();
    myValue = 0;
  }

  otherMethod(String rounded) {
    print("rounded: " + rounded);
  }

  @override
  Widget build(BuildContext context) {
    final slider = SleekCircularSlider(
      min: 0,
      max: 120.0,
      initialValue: 60,
      appearance: CircularSliderAppearance(
          size: 279,
          startAngle: 120,
          angleRange: 300,
          animationEnabled: true,
          infoProperties: InfoProperties(
            bottomLabelText: 'kg',
            bottomLabelStyle: TextStyle(
              fontSize: 25,
            ),
            mainLabelStyle: TextStyle(
              fontSize: 70,
              fontFamily: 'RalewaySemiBold',
            ),
          ),
          customColors: CustomSliderColors(
            hideShadow: true,
            trackColor: Color(0XFFFFF176),
            dotColor: Color(0XFFFAFAFA),
            progressBarColor: Color(0XFF00E676),
          ),
          customWidths: CustomSliderWidths(
            trackWidth: 5,
            progressBarWidth: 20,
            handlerSize: 4,
          )),
      innerWidget: (double value) {
        // use your custom widget inside the slider (gets a slider value from the callback)
        return Column(
          children: <Widget>[
            Slider(
                value: value,
                min: 0,
                max: 120,

                onChanged: (double weight) {
                  setState(() {
                    String newValue = weight.ceil().toInt().toString();
                    print("$newValue");
                    otherMethod(newValue);
                  });
                }),
             Container(
                    color: Colors.deepPurpleAccent,
                    child: Text(
                      "Test text $value",
                      style: TextStyle(color: Colors.black),
                    ))
          ],
        );
      },
      onChangeEnd: (double weight) {
        setState(() {
          String newValue = weight.ceil().toInt().toString();
          print("$newValue");
          otherMethod(newValue);
        });
      },
    );
    return Container(
      child: Column(
        children: <Widget>[
          Center(child: slider),
        ],
      ),
    );
  }
}


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