Exposes antialiasing option in Rive and RiveAnimation

This commit is contained in:
matt Sullivan
2021-06-11 13:49:03 -07:00
parent 9db1dbfe85
commit ec8002ea05
3 changed files with 32 additions and 18 deletions

View File

@ -15,6 +15,7 @@ class SimpleAnimation extends StatelessWidget {
child: RiveAnimation.network(
'https://cdn.rive.app/animations/vehicles.riv',
fit: BoxFit.cover,
antialiasing: false,
),
),
);

View File

@ -6,6 +6,7 @@ import 'package:rive/src/rive_render_box.dart';
import 'package:rive/src/runtime_artboard.dart';
class Rive extends LeafRenderObjectWidget {
/// Artboard used for drawing
final Artboard artboard;
/// Determines whether to use the inherent size of the [artboard], i.e. the
@ -27,12 +28,19 @@ class Rive extends LeafRenderObjectWidget {
/// this to `true`.
final bool useArtboardSize;
/// Fit for the rendering artboard
final BoxFit fit;
/// Alignment for the rendering artboard
final Alignment alignment;
/// Enables/disables anitalising
final bool antialiasing;
const Rive({
required this.artboard,
this.useArtboardSize = false,
this.antialiasing = true,
BoxFit? fit,
Alignment? alignment,
}) : fit = fit ?? BoxFit.contain,
@ -40,6 +48,8 @@ class Rive extends LeafRenderObjectWidget {
@override
RenderObject createRenderObject(BuildContext context) {
// Doing this here and not in constructor so it can remain const
artboard.antialiasing = antialiasing;
return RiveRenderObject(artboard as RuntimeArtboard)
..fit = fit
..alignment = alignment
@ -50,6 +60,7 @@ class Rive extends LeafRenderObjectWidget {
@override
void updateRenderObject(
BuildContext context, covariant RiveRenderObject renderObject) {
artboard.antialiasing = antialiasing;
renderObject
..artboard = artboard
..fit = fit

View File

@ -15,15 +15,31 @@ enum _Source {
/// animation are not specified, the default artboard and first animation fonund
/// within it are used.
class RiveAnimation extends StatefulWidget {
/// The asset name or url
final String name;
/// The type of source used to retrieve the asset
final _Source src;
/// The name of the artboard to use; default artboard if not specified
final String? artboard;
/// List of animations to play; default animation if not specified
final List<String> animations;
/// List of state machines to play; none will play if not specified
final List<String> stateMachines;
/// Fit for the animation in the widget
final BoxFit? fit;
/// Alignment for the animation in the widget
final Alignment? alignment;
/// Widget displayed while the rive is loading.
/// Enable/disable antialiasing when rendering
final bool antialiasing;
/// Widget displayed while the rive is loading
final Widget? placeHolder;
/// Creates a new RiveAnimation from an asset bundle
@ -35,6 +51,7 @@ class RiveAnimation extends StatefulWidget {
this.fit,
this.alignment,
this.placeHolder,
this.antialiasing = true,
}) : src = _Source.asset;
const RiveAnimation.network(
@ -45,6 +62,7 @@ class RiveAnimation extends StatefulWidget {
this.fit,
this.alignment,
this.placeHolder,
this.antialiasing = true,
}) : src = _Source.network;
@override
@ -88,23 +106,6 @@ class _RiveAnimationState extends State<RiveAnimation> {
final res = await http.get(Uri.parse(widget.name));
final data = ByteData.view(res.bodyBytes.buffer);
_init(data);
// final client = HttpClient();
// final contents = <int>[];
// client
// .getUrl(Uri.parse(widget.name))
// .then(
// (req) async => req.close(),
// )
// .then(
// (res) => res.listen(
// contents.addAll,
// onDone: () {
// final data = ByteData.view(Uint8List.fromList(contents).buffer);
// _init(data);
// },
// ),
// );
}
/// Initializes the artboard, animation, and controller
@ -157,6 +158,7 @@ class _RiveAnimationState extends State<RiveAnimation> {
artboard: _artboard!,
fit: widget.fit,
alignment: widget.alignment,
antialiasing: widget.antialiasing,
)
: widget.placeHolder ?? const SizedBox();
}