Merge pull request #121 from rive-app/antialiasing

Antialiasing
This commit is contained in:
Matt Sullivan
2021-06-11 17:23:50 -07:00
committed by GitHub
6 changed files with 45 additions and 26 deletions

View File

@ -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 ## [0.7.16] - 2021-06-11 12:00:00
- Fixes broken build issue in 0.7.15 - Fixes broken build issue in 0.7.15
## [0.7.15] - 2021-06-10 12:00:00 ## [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. - RiveAnimation now takes lists of animation and state machine names and plays all of them.
- NOTE: this build is broken - NOTE: this build is broken

View File

@ -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.

View File

@ -11,7 +11,6 @@ class SimpleAnimation extends StatelessWidget {
title: const Text('Simple Animation'), title: const Text('Simple Animation'),
), ),
body: const Center( body: const Center(
// child: RiveAnimation.asset('assets/off_road_car.riv'),
child: RiveAnimation.network( child: RiveAnimation.network(
'https://cdn.rive.app/animations/vehicles.riv', 'https://cdn.rive.app/animations/vehicles.riv',
fit: BoxFit.cover, fit: BoxFit.cover,

View File

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

View File

@ -4,7 +4,7 @@ import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:rive/rive.dart'; import 'package:rive/rive.dart';
import 'package:rive/src/rive_core/artboard.dart'; import 'package:rive/src/rive_core/artboard.dart';
import 'package:universal_io/io.dart'; import 'package:http/http.dart' as http;
enum _Source { enum _Source {
asset, asset,
@ -15,14 +15,31 @@ enum _Source {
/// animation are not specified, the default artboard and first animation fonund /// animation are not specified, the default artboard and first animation fonund
/// within it are used. /// within it are used.
class RiveAnimation extends StatefulWidget { class RiveAnimation extends StatefulWidget {
/// The asset name or url
final String name; final String name;
/// The type of source used to retrieve the asset
final _Source src; final _Source src;
/// The name of the artboard to use; default artboard if not specified
final String? artboard; final String? artboard;
/// List of animations to play; default animation if not specified
final List<String> animations; final List<String> animations;
/// List of state machines to play; none will play if not specified
final List<String> stateMachines; final List<String> stateMachines;
/// Fit for the animation in the widget
final BoxFit? fit; final BoxFit? fit;
/// Alignment for the animation in the widget
final Alignment? alignment; 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; final Widget? placeHolder;
/// Creates a new RiveAnimation from an asset bundle /// Creates a new RiveAnimation from an asset bundle
@ -34,6 +51,7 @@ class RiveAnimation extends StatefulWidget {
this.fit, this.fit,
this.alignment, this.alignment,
this.placeHolder, this.placeHolder,
this.antialiasing = true,
}) : src = _Source.asset; }) : src = _Source.asset;
const RiveAnimation.network( const RiveAnimation.network(
@ -44,6 +62,7 @@ class RiveAnimation extends StatefulWidget {
this.fit, this.fit,
this.alignment, this.alignment,
this.placeHolder, this.placeHolder,
this.antialiasing = true,
}) : src = _Source.network; }) : src = _Source.network;
@override @override
@ -83,24 +102,10 @@ class _RiveAnimationState extends State<RiveAnimation> {
/// Loads a Rive file from an HTTP source and configures artboard, animation, /// Loads a Rive file from an HTTP source and configures artboard, animation,
/// and controller. /// and controller.
void _loadNetwork() { Future<void> _loadNetwork() async {
final client = HttpClient(); final res = await http.get(Uri.parse(widget.name));
final contents = <int>[]; final data = ByteData.view(res.bodyBytes.buffer);
_init(data);
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 /// Initializes the artboard, animation, and controller
@ -153,6 +158,7 @@ class _RiveAnimationState extends State<RiveAnimation> {
artboard: _artboard!, artboard: _artboard!,
fit: widget.fit, fit: widget.fit,
alignment: widget.alignment, alignment: widget.alignment,
antialiasing: widget.antialiasing,
) )
: widget.placeHolder ?? const SizedBox(); : widget.placeHolder ?? const SizedBox();
} }

View File

@ -1,6 +1,6 @@
name: rive 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. 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 repository: https://github.com/rive-app/rive-flutter
homepage: https://rive.app homepage: https://rive.app
@ -12,8 +12,8 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
graphs: ^2.0.0 graphs: ^2.0.0
http: ^0.13.3
meta: ^1.3.0 meta: ^1.3.0
universal_io: ^2.0.4
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: