Custom data - PixelaGt/flusmic GitHub Wiki
As you know from handling response section, we have a FlusmicResponse object holding all the results from our query.
The data json object that every result have, can be converted to a custom class with the help of JsonSerializable and the Freezed package.
Include JsonSerializable in your dependencies.
dependencies:
flusmic: ^2.0.0
freezed_annotation: <latest-version>
json_annotation: <latest-version>
dev_dependencies:
flutter_test:
sdk: flutter
build_runner: <latest-version>
freezed: <latest-version>
json_serializable: <latest-version>NOTE: You can exclude Freezed package and work only with JsonSerializable. Here is included because is one of our favorite ways to handle data and we will continue this custom class structure example using it.
Let's say that in our data object, comes the next objects:
- A Image named
image - A Key Text named
single_text - A GeoPoint named
location - And a number named
number
Flusmic includes predifined classes that handle some of these values:
- DocumentReference: A
Documentwithout data (like in content relationship). - EmbedImage: A Image inside a RichText.
- EmbedText: A Text inside a RichText.
- Geopoint: A location, with
latitudeandlogitude. - Media: An audio, image or any other document in the library.
- SimpleImage: A image.
- SimpleText: A text.
- Slice: A slice an it structure.
- Span: A text with style.
- Weblink: A link to an URL outside Prismic.io.
Now, we can create our Data object, including this Flusmic types:
import 'package:flusmic_ui/flusmic_ui.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'data.freezed.dart';
part 'data.g.dart';
///Data model
@freezed
abstract class Data with _$Data {
///Deafult factory constructor for Data
factory Data({
@required SimpleImage image,
@required @JsonKey(name: 'simple_text') String single_text,
@required Geopoint location,
@required double number,
}) = _Data;
///Creates a Data object from json
factory Data.fromJson(Map<String, dynamic> json) =>
_$DataFromJson(json);
}Now we only need to run:
pub run build_runner buildor if you are working with Flutter:
flutter pub run build_runner buildAnd all left you need to do is parsing the data object to your brand new Data class:
FlusmicResponse response = await flusmic.getRootDocument();
final firstResult = response.results.first;
Data data = Data.fromJson(firstResult.data);RichText data type in Flusmic can include images and text. To handle this, you need to include the field as:
@freezed
abstract class Data with _$Data {
factory Data({
@required List<Richable> richTextField // <- Handles RichText fields
}) = _Data;
}Links in Flusmic can include media, a document reference or a URL to an extenal website. To handle this, you need to include the field as:
@freezed
abstract class Data with _$Data {
factory Data({
@required Linkeable linkField, // <- Handles Link fields
}) = _Data;
}