Open pmagnuson opened 1 year ago
I have defined the following as a custom step in a NavigableTask
// avoid collisions on Step class
import 'package:survey_kit/survey_kit.dart' as k;
class CustomScaleStep extends k.Step {
final sliderKey = GlobalKey<SliderTextState>();
@override
Widget createView({required k.QuestionResult? questionResult}) {
return k.StepView(
step: k.QuestionStep(
showAppBar: false,
answerFormat: const k.IntegerAnswerFormat(
defaultValue: 5,
)),
title: const Text('title'),
child: SliderText(key: sliderKey), // custom component
resultFunction: () => k.IntegerQuestionResult(
id: k.Identifier(id: 'identifier'),
startDate: DateTime.now(),
endDate: DateTime.now(),
valueIdentifier: 'valueIdentifier',
result: sliderKey.currentState!.sliderCurrentValue.toInt()));
}
@override
Map<String, dynamic> toJson() {
return {};
}
}
The showAppBar: false,
seems to be ignored.
With the following custom Step:
// avoid collision with material Step
import 'package:survey_kit/survey_kit.dart' as sk;
class CustomScaleStep extends sk.Step {
final sliderKey = GlobalKey<SliderTextState>();
@override
Widget createView({required sk.QuestionResult? questionResult}) {
return sk.StepView(
step: sk.QuestionStep(
// showAppBar: false,
answerFormat: const sk.IntegerAnswerFormat(
defaultValue: 5,
)),
title: const Text('title'),
child: SliderText(key: sliderKey),
resultFunction: () {
print('result ${sliderKey.currentState!.sliderCurrentValue.toInt()}');
return sk.IntegerQuestionResult(
id: sk.StepIdentifier(),
startDate: DateTime.now(),
endDate: DateTime.now(),
valueIdentifier:
sliderKey.currentState!.sliderCurrentValue.toInt().toString(),
result: sliderKey.currentState!.sliderCurrentValue.toInt(),
);
});
}
@override
Map<String, dynamic> toJson() {
return {};
}
}
and in the enclosing task, this navigation rule is added:
task.addNavigationRule(
forTriggerStepIdentifier: task.steps[1].stepIdentifier,
navigationRule:
sk.ConditionalNavigationRule(resultToStepIdentifierMapper: (input) {
if ((input == '1') || (input == '2')) {
return null;
}
return task.steps[0].stepIdentifier;
}),
);
in the ConditionalNavigationRule
the input
variable reflects the value of valueIdentifier
in the CustomScaleStep.
It seems that the choice of naming between valueIdentifier
and result
could be improved in the resultFunction
. It would be more intuitive if input
reflected the result
parameter.
I am also interested in building a CustomStep that will play a video and then move to the next step. Is there a way to trigger the Next button on an arbitrary event? I would be best to disable the Next button or not show until the event has occurred. Thanks!
@pmagnuson Hi, are you using CustomStep via json? How are you able to add the json parser for the custom step in survey_kit?
@adar2378 I am no longer using this library.
I am finding it quite difficult to navigate the documentation of CustomResult & CustomStep.
My goal is to create a custom Slider instead of ScaledAnswerFormat.
Any examples would be greatly appreciated.