186 lines
5.6 KiB
Dart
186 lines
5.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lamiter/Class/Question/dtq.dart';
|
|
import 'package:lamiter/Class/Question/iq.dart';
|
|
import 'package:lamiter/Class/Question/question.dart';
|
|
import 'package:lamiter/Class/Question/scq.dart';
|
|
import 'package:lamiter/Class/Question/sdq.dart';
|
|
import 'package:lamiter/Class/Question/tfq.dart';
|
|
import 'package:lamiter/Provider/Form/form_provider.dart';
|
|
|
|
class QuestionDecoder<T extends FormProvider> {
|
|
TextInputType _getSDQKeybaordType(int id) {
|
|
/*
|
|
TextInputType.text = 0
|
|
TextInputType.multiline = 1
|
|
TextInputType.name = 2
|
|
TextInputType.number = 3
|
|
TextInputType.emailAddress = 4
|
|
*/
|
|
switch (id) {
|
|
case 0:
|
|
return TextInputType.text;
|
|
case 1:
|
|
return TextInputType.multiline;
|
|
case 2:
|
|
return TextInputType.name;
|
|
case 3:
|
|
return TextInputType.number;
|
|
case 4:
|
|
return TextInputType.emailAddress;
|
|
case 5:
|
|
return const TextInputType.numberWithOptions(decimal: true);
|
|
default:
|
|
return TextInputType.text;
|
|
}
|
|
}
|
|
|
|
TextCapitalization _getSDQTextCapitalization(int id) {
|
|
/*
|
|
TextCapitalization.none = 0
|
|
TextCapitalization.words = 1
|
|
TextCapitalization.sentences = 2
|
|
*/
|
|
switch (id) {
|
|
case 0:
|
|
return TextCapitalization.none;
|
|
case 1:
|
|
return TextCapitalization.words;
|
|
case 2:
|
|
return TextCapitalization.sentences;
|
|
default:
|
|
return TextCapitalization.none;
|
|
}
|
|
}
|
|
|
|
SDQValidator _getSDQValidator(int id) {
|
|
switch (id) {
|
|
case 0:
|
|
return SDQValidator.none;
|
|
case 1:
|
|
return SDQValidator.nonNull;
|
|
case 2:
|
|
return SDQValidator.email;
|
|
case 3:
|
|
return SDQValidator.phoneNumber;
|
|
case 4:
|
|
return SDQValidator.positiveNumber;
|
|
default:
|
|
return SDQValidator.none;
|
|
}
|
|
}
|
|
|
|
IQLayoutShape _getIQLayoutShape(int id) {
|
|
switch (id) {
|
|
case 0:
|
|
return IQLayoutShape.circle;
|
|
case 1:
|
|
return IQLayoutShape.rectangle;
|
|
default:
|
|
return IQLayoutShape.circle;
|
|
}
|
|
}
|
|
|
|
List<Question> decode(List<dynamic> response) {
|
|
List<Question> form = [];
|
|
for (final questionJson in response) {
|
|
final layoutJson = questionJson['layoutAttributes'];
|
|
switch (questionJson['layoutType']) {
|
|
case 'sdq':
|
|
form.add(
|
|
SDQ<T>(
|
|
id: questionJson['_id'],
|
|
required: questionJson['required'] ?? false,
|
|
validator: _getSDQValidator(questionJson['validator'] ?? 0),
|
|
attributes: SDQLayoutAttributes(
|
|
title: layoutJson['title'],
|
|
required: questionJson['required'] ?? false,
|
|
hintText: layoutJson['hintText'],
|
|
keyboardType:
|
|
_getSDQKeybaordType(layoutJson['keyboardType'] ?? 0),
|
|
textCapitalization: _getSDQTextCapitalization(
|
|
layoutJson['textCapitalization'] ?? 0),
|
|
maxLines: layoutJson['maxLines'] ?? 1,
|
|
obscureText: layoutJson['obscureText'] ?? false,
|
|
),
|
|
),
|
|
);
|
|
break;
|
|
case 'tfq':
|
|
form.add(
|
|
TFQ<T>(
|
|
id: questionJson['_id'],
|
|
required: questionJson['required'] ?? false,
|
|
attributes: TFQLayoutAttributes(
|
|
title: layoutJson['title'],
|
|
required: questionJson['required'] ?? false,
|
|
trueIcon: layoutJson['trueIcon'] != null
|
|
? IconData(
|
|
layoutJson['trueIcon'],
|
|
fontFamily: 'MaterialIcons',
|
|
)
|
|
: null,
|
|
falseIcon: layoutJson['falseIcon'] != null
|
|
? IconData(
|
|
layoutJson['falseIcon'],
|
|
fontFamily: 'MaterialIcons',
|
|
)
|
|
: null,
|
|
),
|
|
),
|
|
);
|
|
break;
|
|
case 'dtq':
|
|
form.add(
|
|
DTQ<T>(
|
|
id: questionJson['_id'],
|
|
required: questionJson['required'] ?? false,
|
|
attributes: DTQLayoutAttributes(
|
|
title: layoutJson['title'],
|
|
required: questionJson['required'] ?? false,
|
|
hintText: layoutJson['hintText'],
|
|
),
|
|
),
|
|
);
|
|
break;
|
|
case 'iq':
|
|
form.add(
|
|
IQ<T>(
|
|
id: questionJson['_id'],
|
|
required: questionJson['required'] ?? false,
|
|
attributes: IQLayoutAttributes(
|
|
title: layoutJson['title'],
|
|
required: questionJson['required'] ?? false,
|
|
sizeWidthFactor: layoutJson['sizeWidthFactor'],
|
|
shape: _getIQLayoutShape(layoutJson['shape'] ?? 0),
|
|
),
|
|
),
|
|
);
|
|
break;
|
|
case 'scq':
|
|
form.add(
|
|
SCQ<T>(
|
|
id: questionJson['_id'],
|
|
required: questionJson['required'] ?? false,
|
|
attributes: SCQLayoutAttributes(
|
|
title: layoutJson['title'],
|
|
required: questionJson['required'] ?? false,
|
|
options: (layoutJson['options'] as List<dynamic>?)
|
|
?.map((option) => option as String)
|
|
.toList() ??
|
|
[],
|
|
scores: (layoutJson['scores'] as List<dynamic>?)
|
|
?.map((score) => score as int)
|
|
.toList() ??
|
|
[],
|
|
),
|
|
),
|
|
);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return form;
|
|
}
|
|
}
|