Compare commits

..

2 Commits

Author SHA1 Message Date
e303633132 force resolution 1.0 2020-10-23 23:43:42 +02:00
7fe343d819 Run tests on linux and generate goldens in a docker container 2020-10-23 23:38:12 +02:00
710 changed files with 1603 additions and 12421 deletions

View File

@ -6,12 +6,12 @@ on:
- master - master
jobs: jobs:
analyze: analyze_and_test:
name: Flutter analyze name: Flutter analyze
strategy: strategy:
matrix: matrix:
flutter: ['stable', 'beta'] flutter: ['stable']
runs-on: macos-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: subosito/flutter-action@v1 - uses: subosito/flutter-action@v1
@ -29,27 +29,4 @@ jobs:
|| (echo "##[error] found changed files after build. please run 'dart tool/prepare_submit.dart'" \ || (echo "##[error] found changed files after build. please run 'dart tool/prepare_submit.dart'" \
"and check in all changes" \ "and check in all changes" \
&& exit 1) && exit 1)
shell: bash shell: bash
test:
name: Run all tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run tests
uses: docker://cirrusci/flutter:2.0.6
with:
args: sh run_tests.sh
build_web_version:
name: Check that the web version compile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
channel: 'beta'
- run: flutter config --enable-web
- run: flutter precache web
- run: flutter pub get
working-directory: example
- run: flutter build web
working-directory: example

View File

@ -10,11 +10,12 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: subosito/flutter-action@v1 - uses: subosito/flutter-action@v1
with: with:
channel: 'beta' channel: 'stable'
- run: flutter pub get - run: flutter pub get
- run: flutter pub run tool/publish/comment_dependency_overrides.dart - run: flutter pub run tool/publish/comment_dependency_overrides.dart
- run: flutter pub get - run: flutter pub get
- run: flutter pub run tool/publish/check_version.dart ${GITHUB_REF} - run: echo ::set-env name=RELEASE_VERSION::${GITHUB_REF}
- run: flutter pub run tool/publish/check_version.dart ${{ env.RELEASE_VERSION }}
- name: Setup credentials - name: Setup credentials
run: | run: |
mkdir -p $FLUTTER_HOME/.pub-cache mkdir -p $FLUTTER_HOME/.pub-cache

17
.github/workflows/test.yaml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Lottie Flutter
on:
pull_request:
push:
branches:
- master
jobs:
test:
name: Run all tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run tests
uses: docker://cirrusci/flutter:1.22.1
with:
args: sh run_tests.sh

View File

@ -1,15 +1,3 @@
## [1.0.1]
- Implement `RenderBox.computeDryLayout`
## [1.0.0]
- Migrate to null safety
- Fix some rendering bugs
- Add an image delegate to dynamically change images
- Allow to use an imageProviderFactory with a zip file
## [0.7.1]
- Fix a crash for some lottie file with empty paths.
## [0.7.0+1] ## [0.7.0+1]
- Fix Flutter Web compilation error - Fix Flutter Web compilation error

View File

@ -6,7 +6,7 @@
Lottie is a mobile library for Android and iOS that parses [Adobe After Effects](https://www.adobe.com/products/aftereffects.html) Lottie is a mobile library for Android and iOS that parses [Adobe After Effects](https://www.adobe.com/products/aftereffects.html)
animations exported as json with [Bodymovin](https://github.com/airbnb/lottie-web) and renders them natively on mobile! animations exported as json with [Bodymovin](https://github.com/airbnb/lottie-web) and renders them natively on mobile!
This repository is an unofficial conversion of the [Lottie-android](https://github.com/airbnb/lottie-android) library in pure Dart. This repository is a unofficial conversion of the [Lottie-android](https://github.com/airbnb/lottie-android) library in pure Dart.
It works on Android, iOS, macOS, linux, windows and web. It works on Android, iOS, macOS, linux, windows and web.
@ -64,7 +64,7 @@ class MyApp extends StatefulWidget {
} }
class _MyAppState extends State<MyApp> with TickerProviderStateMixin { class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
late final AnimationController _controller; AnimationController _controller;
@override @override
void initState() { void initState() {
@ -137,7 +137,7 @@ class MyWidget extends StatefulWidget {
} }
class _MyWidgetState extends State<MyWidget> { class _MyWidgetState extends State<MyWidget> {
late final Future<LottieComposition> _composition; Future<LottieComposition> _composition;
@override @override
void initState() { void initState() {
@ -176,7 +176,7 @@ a specific position and size.
class CustomDrawer extends StatelessWidget { class CustomDrawer extends StatelessWidget {
final LottieComposition composition; final LottieComposition composition;
const CustomDrawer(this.composition, {Key? key}) : super(key: key); const CustomDrawer(this.composition, {Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -246,12 +246,13 @@ class _Animation extends StatelessWidget {
```` ````
## Limitations ## Limitations
This port supports the same [feature set as Lottie Android](https://airbnb.io/lottie/#/supported-features). Only the [supported features of Lottie Android](https://airbnb.io/lottie/#/supported-features)
are supported in this port.
## Flutter Web ## Flutter Web
Run the app with `flutter run -d chrome --web-renderer canvaskit` Run the app with `flutter run -d Chrome --dart-define=FLUTTER_WEB_USE_SKIA=true --release`
See a preview here: https://xvrh.github.io/lottie-flutter-web/ See a preview here: https://xvrh.github.io/lottie-flutter/index.html
## More examples ## More examples
See the `example` folder for more code samples of the various possibilities. See the `example` folder for more code samples of the various possibilities.

View File

@ -6,7 +6,7 @@
Lottie is a mobile library for Android and iOS that parses [Adobe After Effects](https://www.adobe.com/products/aftereffects.html) Lottie is a mobile library for Android and iOS that parses [Adobe After Effects](https://www.adobe.com/products/aftereffects.html)
animations exported as json with [Bodymovin](https://github.com/airbnb/lottie-web) and renders them natively on mobile! animations exported as json with [Bodymovin](https://github.com/airbnb/lottie-web) and renders them natively on mobile!
This repository is an unofficial conversion of the [Lottie-android](https://github.com/airbnb/lottie-android) library in pure Dart. This repository is a unofficial conversion of the [Lottie-android](https://github.com/airbnb/lottie-android) library in pure Dart.
It works on Android, iOS, macOS, linux, windows and web. It works on Android, iOS, macOS, linux, windows and web.
@ -78,12 +78,13 @@ import 'example/lib/examples/simple_dynamic_properties.dart#example';
```` ````
## Limitations ## Limitations
This port supports the same [feature set as Lottie Android](https://airbnb.io/lottie/#/supported-features). Only the [supported features of Lottie Android](https://airbnb.io/lottie/#/supported-features)
are supported in this port.
## Flutter Web ## Flutter Web
Run the app with `flutter run -d chrome --web-renderer canvaskit` Run the app with `flutter run -d Chrome --dart-define=FLUTTER_WEB_USE_SKIA=true --release`
See a preview here: https://xvrh.github.io/lottie-flutter-web/ See a preview here: https://xvrh.github.io/lottie-flutter/index.html
## More examples ## More examples
See the `example` folder for more code samples of the various possibilities. See the `example` folder for more code samples of the various possibilities.

View File

@ -1,17 +1,16 @@
include: package:pedantic/analysis_options.yaml include: package:pedantic/analysis_options.yaml
analyzer: analyzer:
errors:
strong-mode: strong-mode:
implicit-casts: false implicit-casts: false
implicit-dynamic: false implicit-dynamic: false
linter: linter:
rules: rules:
avoid_dynamic_calls: true
avoid_renaming_method_parameters: true avoid_renaming_method_parameters: true
avoid_returning_null_for_future: true avoid_returning_null_for_future: true
avoid_returning_null_for_void: true avoid_returning_null_for_void: true
avoid_returning_this: true avoid_returning_this: true
avoid_setters_without_getters: true avoid_setters_without_getters: true
avoid_web_libraries_in_flutter: true
await_only_futures: true await_only_futures: true
camel_case_types: true camel_case_types: true
cancel_subscriptions: true cancel_subscriptions: true
@ -27,7 +26,6 @@ linter:
overridden_fields: true overridden_fields: true
prefer_inlined_adds: true prefer_inlined_adds: true
prefer_interpolation_to_compose_strings: true prefer_interpolation_to_compose_strings: true
prefer_null_aware_method_calls: true
prefer_null_aware_operators: true prefer_null_aware_operators: true
prefer_relative_imports: true prefer_relative_imports: true
prefer_typing_uninitialized_variables: true prefer_typing_uninitialized_variables: true
@ -35,9 +33,7 @@ linter:
test_types_in_equals: true test_types_in_equals: true
unnecessary_brace_in_string_interps: true unnecessary_brace_in_string_interps: true
unnecessary_getters_setters: true unnecessary_getters_setters: true
unnecessary_null_checks: true
unnecessary_parenthesis: true unnecessary_parenthesis: true
unnecessary_statements: true unnecessary_statements: true
use_function_type_syntax_for_parameters: true use_function_type_syntax_for_parameters: true
use_if_null_to_convert_nulls_to_bools: true
void_checks: true void_checks: true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig" #include "Generated.xcconfig"

View File

@ -1,3 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig" #include "Generated.xcconfig"

View File

@ -23,7 +23,7 @@ class __PageState extends State<_Page> {
void initState() { void initState() {
super.initState(); super.initState();
SchedulerBinding.instance!.addPostFrameCallback((_) => _showLoader()); SchedulerBinding.instance.addPostFrameCallback((_) => _showLoader());
} }
void _showLoader() { void _showLoader() {

View File

@ -6,7 +6,7 @@ void main() async {
} }
class App extends StatelessWidget { class App extends StatelessWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -9,7 +9,7 @@ class MyApp extends StatefulWidget {
} }
class _MyAppState extends State<MyApp> with TickerProviderStateMixin { class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
late final AnimationController _controller; AnimationController _controller;
@override @override
void initState() { void initState() {

View File

@ -17,7 +17,7 @@ class MyApp extends StatefulWidget {
} }
class _MyAppState extends State<MyApp> with TickerProviderStateMixin { class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
late final AnimationController _controller; AnimationController _controller;
@override @override
void initState() { void initState() {
@ -86,7 +86,8 @@ class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
], ],
), ),
const SizedBox(height: 30), const SizedBox(height: 30),
ElevatedButton( RaisedButton(
child: Text('Loop between frames'),
onPressed: () { onPressed: () {
// Loop between 2 specifics frames // Loop between 2 specifics frames
@ -96,10 +97,9 @@ class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
min: start, min: start,
max: stop, max: stop,
reverse: true, reverse: true,
period: _controller.duration! * (stop - start), period: _controller.duration * (stop - start),
); );
}, },
child: Text('Loop between frames'),
), ),
], ],
), ),

View File

@ -22,7 +22,7 @@ class MyWidget extends StatefulWidget {
} }
class _MyWidgetState extends State<MyWidget> { class _MyWidgetState extends State<MyWidget> {
late final Future<LottieComposition> _composition; Future<LottieComposition> _composition;
@override @override
void initState() { void initState() {
@ -57,7 +57,7 @@ class _MyWidgetState extends State<MyWidget> {
class CustomDrawer extends StatelessWidget { class CustomDrawer extends StatelessWidget {
final LottieComposition composition; final LottieComposition composition;
const CustomDrawer(this.composition, {Key? key}) : super(key: key); const CustomDrawer(this.composition, {Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -23,7 +23,7 @@ class MyWidget extends StatefulWidget {
} }
class _MyWidgetState extends State<MyWidget> { class _MyWidgetState extends State<MyWidget> {
late final Future<LottieComposition> _composition; Future<LottieComposition> _composition;
@override @override
void initState() { void initState() {

View File

@ -8,7 +8,7 @@ void main() async {
} }
class App extends StatefulWidget { class App extends StatefulWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
_AppState createState() => _AppState(); _AppState createState() => _AppState();
@ -50,7 +50,7 @@ class _AppState extends State<App> with TickerProviderStateMixin {
value: _useDelegates, value: _useDelegates,
onChanged: (newValue) { onChanged: (newValue) {
setState(() { setState(() {
_useDelegates = newValue!; _useDelegates = newValue;
}); });
}, },
), ),

View File

@ -7,14 +7,14 @@ void main() async {
} }
class App extends StatefulWidget { class App extends StatefulWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
_AppState createState() => _AppState(); _AppState createState() => _AppState();
} }
class _AppState extends State<App> with TickerProviderStateMixin { class _AppState extends State<App> with TickerProviderStateMixin {
late final TextEditingController _textController; TextEditingController _textController;
@override @override
void initState() { void initState() {

View File

@ -6,14 +6,14 @@ void main() async {
} }
class App extends StatefulWidget { class App extends StatefulWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
_AppState createState() => _AppState(); _AppState createState() => _AppState();
} }
class _AppState extends State<App> with TickerProviderStateMixin { class _AppState extends State<App> with TickerProviderStateMixin {
late final AnimationController _animationController; AnimationController _animationController;
bool _showAnimation = true; bool _showAnimation = true;
@override @override

View File

@ -9,14 +9,14 @@ void main() async {
} }
class App extends StatefulWidget { class App extends StatefulWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
_AppState createState() => _AppState(); _AppState createState() => _AppState();
} }
class _AppState extends State<App> with TickerProviderStateMixin { class _AppState extends State<App> with TickerProviderStateMixin {
late final Future<LottieComposition> _composition; Future<LottieComposition> _composition;
@override @override
void initState() { void initState() {
@ -35,9 +35,9 @@ class _AppState extends State<App> with TickerProviderStateMixin {
body: FutureBuilder<LottieComposition>( body: FutureBuilder<LottieComposition>(
future: _composition, future: _composition,
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.hasError) return ErrorWidget(snapshot.error!); if (snapshot.hasError) return ErrorWidget(snapshot.error);
if (!snapshot.hasData) return CircularProgressIndicator(); if (!snapshot.hasData) return CircularProgressIndicator();
return _LottieDetails(snapshot.data!); return _LottieDetails(snapshot.data);
}, },
), ),
), ),
@ -48,7 +48,7 @@ class _AppState extends State<App> with TickerProviderStateMixin {
class _LottieDetails extends StatefulWidget { class _LottieDetails extends StatefulWidget {
final LottieComposition composition; final LottieComposition composition;
const _LottieDetails(this.composition, {Key? key}) : super(key: key); const _LottieDetails(this.composition, {Key key}) : super(key: key);
@override @override
_LottieDetailsState createState() => _LottieDetailsState(); _LottieDetailsState createState() => _LottieDetailsState();
@ -56,7 +56,7 @@ class _LottieDetails extends StatefulWidget {
class _LottieDetailsState extends State<_LottieDetails> class _LottieDetailsState extends State<_LottieDetails>
with TickerProviderStateMixin { with TickerProviderStateMixin {
late final AnimationController _controller; AnimationController _controller;
@override @override
void initState() { void initState() {
@ -87,17 +87,17 @@ class _LottieDetailsState extends State<_LottieDetails>
title: Text('Composition duration'), title: Text('Composition duration'),
trailing: Text(widget.composition.durationFrames.toStringAsFixed(1)), trailing: Text(widget.composition.durationFrames.toStringAsFixed(1)),
), ),
ElevatedButton( RaisedButton(
onPressed: () => _playBetween('touchDownEnd', 'touchUpCancel'),
child: Text('touchDownEnd - touchUpCancel'), child: Text('touchDownEnd - touchUpCancel'),
onPressed: () => _playBetween('touchDownEnd', 'touchUpCancel'),
), ),
ElevatedButton( RaisedButton(
onPressed: () => _playBetween('touchDownStart', 'touchDownEnd'),
child: Text('touchDownStart - touchDownEnd'), child: Text('touchDownStart - touchDownEnd'),
onPressed: () => _playBetween('touchDownStart', 'touchDownEnd'),
), ),
ElevatedButton( RaisedButton(
onPressed: () => _playBetween('touchDownEnd', 'touchUpEnd'),
child: Text('touchDownEnd - touchUpEnd'), child: Text('touchDownEnd - touchUpEnd'),
onPressed: () => _playBetween('touchDownEnd', 'touchUpEnd'),
), ),
for (var marker in widget.composition.markers) for (var marker in widget.composition.markers)
ListTile( ListTile(
@ -112,8 +112,8 @@ class _LottieDetailsState extends State<_LottieDetails>
} }
void _playBetween(String marker1, String marker2) { void _playBetween(String marker1, String marker2) {
var start = widget.composition.getMarker(marker1)!.start; var start = widget.composition.getMarker(marker1).start;
var end = widget.composition.getMarker(marker2)!.start; var end = widget.composition.getMarker(marker2).start;
_controller.value = start; _controller.value = start;
_controller.animateTo(end, _controller.animateTo(end,

View File

@ -1,63 +0,0 @@
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
late final AnimationController _controller;
int _repeatIndex = 0;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this)
..addStatusListener((status) {
if (status == AnimationStatus.completed) {
setState(() {
_repeatIndex++;
});
if (_repeatIndex < 5) {
_controller.reset();
_controller.forward();
}
}
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ListView(
children: [
Lottie.asset(
'assets/AndroidWave.json',
controller: _controller,
width: 150,
height: 150,
onLoaded: (composition) {
// Configure the AnimationController with the duration of the
// Lottie file and start the animation.
_controller.duration = composition.duration;
_controller.forward();
},
),
Center(child: Text('Repeat: $_repeatIndex')),
],
),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}

View File

@ -12,7 +12,7 @@ void main() async {
} }
class App extends StatefulWidget { class App extends StatefulWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
_AppState createState() => _AppState(); _AppState createState() => _AppState();
@ -20,7 +20,7 @@ class App extends StatefulWidget {
class _AppState extends State<App> with TickerProviderStateMixin { class _AppState extends State<App> with TickerProviderStateMixin {
int _index = 0; int _index = 0;
late final AnimationController _animationController; AnimationController _animationController;
@override @override
void initState() { void initState() {

View File

@ -1,5 +1,3 @@
//@dart=2.10
import 'dart:io'; import 'dart:io';
import 'dart:ui'; import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -28,9 +26,9 @@ class _MyAppState extends State<MyApp> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
ElevatedButton( RaisedButton(
onPressed: _export,
child: Text('Export all frames'), child: Text('Export all frames'),
onPressed: _export,
), ),
if (_frames != null) if (_frames != null)
Expanded( Expanded(

View File

@ -21,36 +21,32 @@ class App extends StatelessWidget {
appBar: AppBar( appBar: AppBar(
title: Text('Lottie Flutter'), title: Text('Lottie Flutter'),
), ),
body: Scrollbar( body: GridView.builder(
child: GridView.builder( itemCount: files.length,
itemCount: files.length, gridDelegate:
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4), itemBuilder: (context, index) {
itemBuilder: (context, index) { var assetName = files[index];
var assetName = files[index]; return GestureDetector(
return GestureDetector( child: _Item(
onTap: () { child: Lottie.asset(
Navigator.push( assetName,
context, frameBuilder: (context, child, composition) {
MaterialPageRoute<void>( return AnimatedOpacity(
builder: (context) => Detail(assetName))); child: child,
}, opacity: composition == null ? 0 : 1,
child: _Item( duration: const Duration(seconds: 1),
child: Lottie.asset( curve: Curves.easeOut,
assetName, );
frameBuilder: (context, child, composition) { },
return AnimatedOpacity(
opacity: composition == null ? 0 : 1,
duration: const Duration(seconds: 1),
curve: Curves.easeOut,
child: child,
);
},
),
), ),
); ),
}, onTap: () {
), Navigator.of(context).push(MaterialPageRoute<void>(
builder: (context) => Detail(assetName)));
},
);
},
), ),
), ),
); );
@ -60,7 +56,7 @@ class App extends StatelessWidget {
class _Item extends StatelessWidget { class _Item extends StatelessWidget {
final Widget child; final Widget child;
const _Item({Key? key, required this.child}) : super(key: key); const _Item({Key key, this.child}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -85,18 +81,26 @@ class _Item extends StatelessWidget {
class Detail extends StatefulWidget { class Detail extends StatefulWidget {
final String assetName; final String assetName;
const Detail(this.assetName, {Key? key}) : super(key: key); const Detail(this.assetName, {Key key}) : super(key: key);
@override @override
_DetailState createState() => _DetailState(); _DetailState createState() => _DetailState();
} }
class _DetailState extends State<Detail> with TickerProviderStateMixin { class _DetailState extends State<Detail> with TickerProviderStateMixin {
late final _controller = AnimationController(vsync: this); AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override @override
void dispose() { void dispose() {
_controller.dispose(); _controller.dispose();
super.dispose(); super.dispose();
} }

View File

@ -13,7 +13,7 @@ void main() async {
class App extends StatelessWidget { class App extends StatelessWidget {
final LottieComposition composition; final LottieComposition composition;
const App({Key? key, required this.composition}) : super(key: key); const App({Key key, this.composition}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -97,13 +97,13 @@ class App extends StatelessWidget {
class _Lottie extends StatefulWidget { class _Lottie extends StatefulWidget {
final LottieComposition composition; final LottieComposition composition;
final double? width; final double width;
final double? height; final double height;
final BoxFit? fit; final BoxFit fit;
final AlignmentGeometry? alignment; final AlignmentGeometry alignment;
const _Lottie(this.composition, const _Lottie(this.composition,
{Key? key, this.width, this.height, this.fit, this.alignment}) {Key key, this.width, this.height, this.fit, this.alignment})
: super(key: key); : super(key: key);
@override @override
@ -111,7 +111,7 @@ class _Lottie extends StatefulWidget {
} }
class __LottieState extends State<_Lottie> with TickerProviderStateMixin { class __LottieState extends State<_Lottie> with TickerProviderStateMixin {
late AnimationController _controller; AnimationController _controller;
@override @override
void initState() { void initState() {

View File

@ -108,17 +108,14 @@ final files = [
'assets/Tests/hd.json', 'assets/Tests/hd.json',
'assets/Tests/map.zip', 'assets/Tests/map.zip',
'assets/TwitterHeartButton.json', 'assets/TwitterHeartButton.json',
'assets/battery_optimizations.json', 'assets/_loading_indicator.json',
'assets/bluetoothscanning.json', 'assets/bluetoothscanning.json',
'assets/camera_change.json',
'assets/envelope.json',
'assets/example_with_images/data.json', 'assets/example_with_images/data.json',
'assets/lf20_w2Afea.json', 'assets/lf20_w2Afea.json',
'assets/lottiefiles/100_percent.json', 'assets/lottiefiles/100_percent.json',
'assets/lottiefiles/28861-connection-style-2.json',
'assets/lottiefiles/45668-arrow-with-light-passing-through.json',
'assets/lottiefiles/Plane.json', 'assets/lottiefiles/Plane.json',
'assets/lottiefiles/StreetByMorning.json', 'assets/lottiefiles/StreetByMorning.json',
'assets/lottiefiles/___.json',
'assets/lottiefiles/a_mountain.json', 'assets/lottiefiles/a_mountain.json',
'assets/lottiefiles/accept_arrows.json', 'assets/lottiefiles/accept_arrows.json',
'assets/lottiefiles/airbnb.json', 'assets/lottiefiles/airbnb.json',
@ -349,9 +346,7 @@ final files = [
'assets/lottiefiles/yoga_carpet.json', 'assets/lottiefiles/yoga_carpet.json',
'assets/lottiefiles/youtube_icon_reveal.json', 'assets/lottiefiles/youtube_icon_reveal.json',
'assets/playing.json', 'assets/playing.json',
'assets/spinning_carrousel.zip', 'assets/weather/_hurricane.json',
'assets/sticker.json',
'assets/tent.json',
'assets/weather/fog.json', 'assets/weather/fog.json',
'assets/weather/hurricane.json', 'assets/weather/hurricane.json',
'assets/weather/thunder-storm.json', 'assets/weather/thunder-storm.json',

View File

@ -6,7 +6,7 @@ void main() async {
} }
class App extends StatelessWidget { class App extends StatelessWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -6,7 +6,7 @@ void main() async {
} }
class App extends StatelessWidget { class App extends StatelessWidget {
const App({Key? key}) : super(key: key); const App({Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -1,3 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig"

View File

@ -1,3 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig"

View File

@ -1,28 +1,27 @@
PODS: PODS:
- FlutterMacOS (1.22.4) - FlutterMacOS (1.0.0)
- path_provider (0.0.1) - path_provider (0.0.1)
- path_provider_macos (0.0.1): - path_provider_macos (0.0.1):
- FlutterMacOS - FlutterMacOS
DEPENDENCIES: DEPENDENCIES:
- FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64-profile`)
- path_provider (from `Flutter/ephemeral/.symlinks/plugins/path_provider/macos`) - path_provider (from `Flutter/ephemeral/.symlinks/plugins/path_provider/macos`)
- path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`)
SPEC REPOS:
trunk:
- FlutterMacOS
EXTERNAL SOURCES: EXTERNAL SOURCES:
FlutterMacOS:
:path: Flutter/ephemeral/.symlinks/flutter/darwin-x64-profile
path_provider: path_provider:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider/macos :path: Flutter/ephemeral/.symlinks/plugins/path_provider/macos
path_provider_macos: path_provider_macos:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos
SPEC CHECKSUMS: SPEC CHECKSUMS:
FlutterMacOS: ac210ef71944b3f04789076d70d4c72c7ec0c619 FlutterMacOS: 15bea8a44d2fa024068daa0140371c020b4b6ff9
path_provider: e0848572d1d38b9a7dd099e79cf83f5b7e2cde9f path_provider: e0848572d1d38b9a7dd099e79cf83f5b7e2cde9f
path_provider_macos: a0a3fd666cb7cd0448e936fb4abad4052961002b path_provider_macos: a0a3fd666cb7cd0448e936fb4abad4052961002b
PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7 PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7
COCOAPODS: 1.10.1 COCOAPODS: 1.9.1

View File

@ -26,6 +26,10 @@
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; };
33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; };
D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F03CC91740A974D36C2A6384 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC6FF5FCD90624533CC60DB /* Pods_Runner.framework */; }; F03CC91740A974D36C2A6384 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC6FF5FCD90624533CC60DB /* Pods_Runner.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
@ -46,6 +50,8 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */,
33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */,
); );
name = "Bundle Framework"; name = "Bundle Framework";
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -67,12 +73,14 @@
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; }; 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; };
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
5B4C0E87024EC2686CA05E23 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; 5B4C0E87024EC2686CA05E23 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -80,6 +88,8 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
D73912F022F37F9E000D13A0 /* App.framework in Frameworks */,
33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */,
F03CC91740A974D36C2A6384 /* Pods_Runner.framework in Frameworks */, F03CC91740A974D36C2A6384 /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -135,6 +145,8 @@
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
D73912EF22F37F9E000D13A0 /* App.framework */,
33D1A10322148B71006C7A3E /* FlutterMacOS.framework */,
); );
path = Flutter; path = Flutter;
sourceTree = "<group>"; sourceTree = "<group>";
@ -269,7 +281,7 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n";
}; };
33CC111E2044C6BF0003C045 /* ShellScript */ = { 33CC111E2044C6BF0003C045 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
@ -318,10 +330,10 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputPaths = ( inputFileListPaths = (
); );
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputPaths = ( outputFileListPaths = (
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;

View File

@ -7,77 +7,91 @@ packages:
name: archive name: archive
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.1.2" version: "2.0.11"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.2"
async: async:
dependency: transitive dependency: transitive
description: description:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.5.0" version: "2.5.0-nullsafety.1"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0-nullsafety.1"
characters: characters:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0-nullsafety.3"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
name: charcode name: charcode
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0-nullsafety.1"
clock: clock:
dependency: transitive dependency: transitive
description: description:
name: clock name: clock
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0-nullsafety.1"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.15.0" version: "1.15.0-nullsafety.3"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
name: crypto name: crypto
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.1" version: "2.1.3"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
name: fake_async name: fake_async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0-nullsafety.1"
ffi: ffi:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "0.1.3"
file: file:
dependency: transitive dependency: transitive
description: description:
name: file name: file
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.1.0" version: "5.2.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -89,124 +103,138 @@ packages:
name: flutter_colorpicker name: flutter_colorpicker
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.4.0" version: "0.3.4"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
golden_toolkit:
dependency: "direct dev"
description:
name: golden_toolkit
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
name: http name: http
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.13.3" version: "0.12.2"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
name: http_parser name: http_parser
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.0" version: "3.1.4"
intl:
dependency: transitive
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.1"
logging: logging:
dependency: transitive dependency: transitive
description: description:
name: logging name: logging
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.1" version: "0.11.4"
lottie: lottie:
dependency: "direct main" dependency: "direct main"
description: description:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "1.0.1" version: "0.7.0+1"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.10" version: "0.12.10-nullsafety.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0-nullsafety.3"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0" version: "1.8.0-nullsafety.1"
path_provider: path_provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider name: path_provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "1.6.21"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
name: path_provider_linux name: path_provider_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "0.0.1+2"
path_provider_macos: path_provider_macos:
dependency: transitive dependency: transitive
description: description:
name: path_provider_macos name: path_provider_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "0.0.4+4"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "1.0.3"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "0.0.4+1"
pedantic: pedantic:
dependency: transitive dependency: transitive
description: description:
name: pedantic name: pedantic
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.11.0" version: "1.8.0+1"
platform: platform:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.0" version: "2.2.1"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "1.0.3"
process: process:
dependency: transitive dependency: transitive
description: description:
name: process name: process
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.2.1" version: "3.0.13"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -218,70 +246,70 @@ packages:
name: source_span name: source_span
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.1" version: "1.8.0-nullsafety.2"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.10.0" version: "1.10.0-nullsafety.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0-nullsafety.1"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0-nullsafety.1"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0-nullsafety.1"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.0" version: "0.2.19-nullsafety.2"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0-nullsafety.3"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0-nullsafety.3"
win32: win32:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.5" version: "1.7.3"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.0" version: "0.1.0"
sdks: sdks:
dart: ">=2.12.0 <3.0.0" dart: ">=2.10.0-110 <2.11.0"
flutter: ">=1.20.0" flutter: ">=1.12.13+hotfix.5 <2.0.0"

View File

@ -1,9 +1,9 @@
name: lottie_example name: lottie_example
description: A sample app for the Lottie player description: A sample app for the Lottie player
publish_to: none version: 0.0.1
environment: environment:
sdk: ">=2.12.0-0 <3.0.0" sdk: ">=2.7.0 <3.0.0"
dependencies: dependencies:
flutter: flutter:
@ -17,6 +17,7 @@ dependencies:
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
golden_toolkit:
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec # following page: https://dart.dev/tools/pub/pubspec
@ -30,7 +31,6 @@ flutter:
- assets/lottiefiles/ - assets/lottiefiles/
- assets/Mobilo/ - assets/Mobilo/
- assets/Tests/ - assets/Tests/
- assets/Tests/images/
- assets/Logo/ - assets/Logo/
- assets/Images/ - assets/Images/
- assets/Images/WeAccept/ - assets/Images/WeAccept/
@ -59,4 +59,4 @@ flutter:
- asset: assets/fonts/Roboto.ttf - asset: assets/fonts/Roboto.ttf
- family: Noto Emoji - family: Noto Emoji
fonts: fonts:
- asset: assets/fonts/Noto-Emoji.ttf - asset: assets/fonts/NotoEmoji-Regular.ttf

View File

@ -7,15 +7,15 @@ import 'package:lottie/lottie.dart';
import 'utils.dart'; import 'utils.dart';
void main() { void main() {
late LottieComposition composition; LottieComposition composition;
setUpAll(() async { setUpAll(() async {
composition = await LottieComposition.fromBytes( composition = await LottieComposition.fromBytes(
File('example/assets/Tests/Shapes.json').readAsBytesSync()); File('assets/Tests/Shapes.json').readAsBytesSync());
}); });
void testGolden(String description, ValueDelegate delegate, void testGolden(String description, ValueDelegate delegate,
{double? progress}) async { {double progress}) async {
var screenshotName = description var screenshotName = description
.toLowerCase() .toLowerCase()
.replaceAll(RegExp('[^a-z0-9 ]'), '') .replaceAll(RegExp('[^a-z0-9 ]'), '')
@ -291,8 +291,8 @@ void main() {
testGolden( testGolden(
'Opacity interpolation ($progress)', 'Opacity interpolation ($progress)',
ValueDelegate.transformOpacity(['Shape Layer 1', 'Rectangle'], ValueDelegate.transformOpacity(['Shape Layer 1', 'Rectangle'],
callback: (frameInfo) => lerpDouble(10, 100, callback: (frameInfo) => lerpDouble(
Curves.linear.transform(frameInfo.overallProgress))! 10, 100, Curves.linear.transform(frameInfo.overallProgress))
.round()), .round()),
progress: progress); progress: progress);
} }

View File

@ -1,4 +1,5 @@
import 'dart:io'; import 'dart:io';
import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:lottie/lottie.dart'; import 'package:lottie/lottie.dart';
@ -9,7 +10,7 @@ void main() {
tester.binding.window.devicePixelRatioTestValue = 1.0; tester.binding.window.devicePixelRatioTestValue = 1.0;
var composition = await LottieComposition.fromBytes( var composition = await LottieComposition.fromBytes(
File('example/assets/Tests/DynamicText.json').readAsBytesSync()); File('assets/Tests/DynamicText.json').readAsBytesSync());
await tester.pumpWidget( await tester.pumpWidget(
MaterialApp( MaterialApp(

View File

@ -13,7 +13,7 @@ void main() {
tester.binding.window.devicePixelRatioTestValue = 1.0; tester.binding.window.devicePixelRatioTestValue = 1.0;
var composition = await LottieComposition.fromBytes( var composition = await LottieComposition.fromBytes(
File('example/assets/17297-fireworks.json').readAsBytesSync()); File('assets/17297-fireworks.json').readAsBytesSync());
await tester.pumpWidget(FilmStrip(composition, size: size)); await tester.pumpWidget(FilmStrip(composition, size: size));

View File

@ -0,0 +1,7 @@
import 'dart:async';
import 'package:golden_toolkit/golden_toolkit.dart';
Future<void> main(FutureOr<void> Function() testMain) async {
await loadAppFonts();
return testMain();
}

View File

@ -7,7 +7,7 @@ import 'package:path/path.dart' as p;
import 'utils.dart'; import 'utils.dart';
void main() { void main() {
var root = 'example/assets'; var root = 'assets';
for (var asset in Directory(root) for (var asset in Directory(root)
.listSync(recursive: true) .listSync(recursive: true)
.whereType<File>() .whereType<File>()
@ -16,8 +16,7 @@ void main() {
var size = Size(500, 400); var size = Size(500, 400);
tester.binding.window.physicalSizeTestValue = size; tester.binding.window.physicalSizeTestValue = size;
tester.binding.window.devicePixelRatioTestValue = 1.0; tester.binding.window.devicePixelRatioTestValue = 1.0;
var composition = var composition = await tester.runAsync(() => FileLottie(asset).load());
(await tester.runAsync(() => FileLottie(asset).load()))!;
await tester.pumpWidget(FilmStrip(composition, size: size)); await tester.pumpWidget(FilmStrip(composition, size: size));

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show More