diff --git a/lib/models/trial.dart b/lib/models/trial.dart index 5535180..db15959 100644 --- a/lib/models/trial.dart +++ b/lib/models/trial.dart @@ -1,6 +1,11 @@ +import 'package:json_annotation/json_annotation.dart'; + import 'trial_type.dart'; +part 'trial.g.dart'; + /// Represents the data of a single trial. +@JsonSerializable() class Trial { /// Unique identifier for the participant final String participantID; @@ -34,4 +39,9 @@ class Trial { return "Trial(participantID: $participantID, sessionID: $sessionID, " "trialType: $trialType, stim: $stim, response: $response)"; } + + /// Convert the [Trial] object to its json representation. + /// This method is particularly useful when uploading data to Firebase and + /// similar no-sql dbs. + Map toJson() => _$TrialToJson(this); } diff --git a/lib/models/trial.g.dart b/lib/models/trial.g.dart new file mode 100644 index 0000000..aeb7675 --- /dev/null +++ b/lib/models/trial.g.dart @@ -0,0 +1,28 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'trial.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Trial _$TrialFromJson(Map json) => Trial( + participantID: json['participantID'] as String, + sessionID: json['sessionID'] as String, + trialType: $enumDecode(_$TrialTypeEnumMap, json['trialType']), + stim: json['stim'] as String, + response: json['response'] as String, + ); + +Map _$TrialToJson(Trial instance) => { + 'participantID': instance.participantID, + 'sessionID': instance.sessionID, + 'trialType': instance.trialType, + 'stim': instance.stim, + 'response': instance.response, + }; + +const _$TrialTypeEnumMap = { + TrialType.practice: 'practice', + TrialType.experimental: 'experimental', +}; diff --git a/test/models/trial_test.dart b/test/models/trial_test.dart index fe0d805..98f2a4c 100644 --- a/test/models/trial_test.dart +++ b/test/models/trial_test.dart @@ -17,4 +17,21 @@ void main() { "response: ${trial.response})"; expect(trial.toString(), strRep); }); + + test( + "Trial.toJson returns a valid json representation", + () { + final Trial trial = Trial( + participantID: '101', + sessionID: '001', + trialType: TrialType.practice, + stim: 'stimuli', + response: 'participant response', + ); + + final Map trialJson = trial.toJson(); + + expect(trialJson, isMap); + }, + ); }