diff --git a/CHANGELOG.md b/CHANGELOG.md index 966ace5..ad79a15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ +## [0.7.17] - 2021-06-11 18:00:00 +- Exposes antialiasing option in Rive and RiveAnimation widgets. + ## [0.7.16] - 2021-06-11 12:00:00 - Fixes broken build issue in 0.7.15 ## [0.7.15] - 2021-06-10 12:00:00 -- Adds linear animation and state machine getters to RuntimeArtboard +- Adds linear animation and state machine getters to RuntimeArtboard. - RiveAnimation now takes lists of animation and state machine names and plays all of them. - NOTE: this build is broken diff --git a/README.md b/README.md index 990be38..e87c522 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,6 @@ _controller.isActiveChanged.addListener(() { } ``` -## More Info +## Antialiasing -For an in-depth tutorial on how to use the runtime, check out [this blog post](https://blog.rive.app/rives-flutter-runtime-part-1/). +If you want to disable antialiasing (usually for performance reasons), you can set `antialiasing` to `false` on the `Rive` and `RiveAnimation` widgets. diff --git a/example/lib/simple_animation.dart b/example/lib/simple_animation.dart index c15b1ef..fc7aa50 100644 --- a/example/lib/simple_animation.dart +++ b/example/lib/simple_animation.dart @@ -11,7 +11,6 @@ class SimpleAnimation extends StatelessWidget { title: const Text('Simple Animation'), ), body: const Center( - // child: RiveAnimation.asset('assets/off_road_car.riv'), child: RiveAnimation.network( 'https://cdn.rive.app/animations/vehicles.riv', fit: BoxFit.cover, diff --git a/lib/src/rive.dart b/lib/src/rive.dart index f02d229..99896ac 100644 --- a/lib/src/rive.dart +++ b/lib/src/rive.dart @@ -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 diff --git a/lib/src/widgets/rive_animation.dart b/lib/src/widgets/rive_animation.dart index 071fe3d..6857c48 100644 --- a/lib/src/widgets/rive_animation.dart +++ b/lib/src/widgets/rive_animation.dart @@ -4,7 +4,7 @@ import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:rive/rive.dart'; import 'package:rive/src/rive_core/artboard.dart'; -import 'package:universal_io/io.dart'; +import 'package:http/http.dart' as http; enum _Source { asset, @@ -15,14 +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 animations; + + /// List of state machines to play; none will play if not specified final List 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 @@ -34,6 +51,7 @@ class RiveAnimation extends StatefulWidget { this.fit, this.alignment, this.placeHolder, + this.antialiasing = true, }) : src = _Source.asset; const RiveAnimation.network( @@ -44,6 +62,7 @@ class RiveAnimation extends StatefulWidget { this.fit, this.alignment, this.placeHolder, + this.antialiasing = true, }) : src = _Source.network; @override @@ -83,24 +102,10 @@ class _RiveAnimationState extends State { /// Loads a Rive file from an HTTP source and configures artboard, animation, /// and controller. - void _loadNetwork() { - final client = HttpClient(); - final contents = []; - - 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); - }, - ), - ); + Future _loadNetwork() async { + final res = await http.get(Uri.parse(widget.name)); + final data = ByteData.view(res.bodyBytes.buffer); + _init(data); } /// Initializes the artboard, animation, and controller @@ -153,6 +158,7 @@ class _RiveAnimationState extends State { artboard: _artboard!, fit: widget.fit, alignment: widget.alignment, + antialiasing: widget.antialiasing, ) : widget.placeHolder ?? const SizedBox(); } diff --git a/pubspec.yaml b/pubspec.yaml index 3be0daf..451917e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: rive description: Rive 2 Flutter Runtime. This package provides runtime functionality for playing back and interacting with animations built with the Rive editor available at https://rive.app. -version: 0.7.16 +version: 0.7.17 repository: https://github.com/rive-app/rive-flutter homepage: https://rive.app @@ -12,8 +12,8 @@ dependencies: flutter: sdk: flutter graphs: ^2.0.0 + http: ^0.13.3 meta: ^1.3.0 - universal_io: ^2.0.4 dev_dependencies: flutter_test: