Skip to content

Commit c9e5394

Browse files
committed
feat: open with sprite
1 parent f5038d4 commit c9e5394

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

packages/mini_sprite_editor/lib/app/view/app.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:flutter_localizations/flutter_localizations.dart';
4+
import 'package:mini_sprite/mini_sprite.dart';
45
import 'package:mini_sprite_editor/config/config.dart';
56
import 'package:mini_sprite_editor/hub/hub.dart';
67
import 'package:mini_sprite_editor/l10n/l10n.dart';
@@ -46,9 +47,19 @@ class App extends StatelessWidget {
4647
colors.split(',').map(int.parse).map(Color.new).toList();
4748
}
4849

50+
final spriteRaw = uri.queryParameters['sprite'];
51+
MiniSprite? sprite;
52+
if (spriteRaw != null) {
53+
try {
54+
sprite = MiniSprite.fromDataString(spriteRaw);
55+
} catch (_) {
56+
// ignore on invalid sprite data
57+
}
58+
}
4959
return MaterialPageRoute(
5060
builder: (_) => WorkspaceView(
5161
colorList: colorList,
62+
sprite: sprite,
5263
),
5364
);
5465
}

packages/mini_sprite_editor/lib/workspace/view/workspace_view.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
3+
import 'package:mini_sprite/mini_sprite.dart';
34
import 'package:mini_sprite_editor/config/cubit/config_cubit.dart';
5+
import 'package:mini_sprite_editor/sprite/sprite.dart';
46
import 'package:mini_sprite_editor/workspace/workspace.dart';
57

68
class WorkspaceView extends StatefulWidget {
79
const WorkspaceView({
810
this.colorList,
11+
this.sprite,
912
super.key,
1013
});
1114

1215
final List<Color>? colorList;
16+
final MiniSprite? sprite;
1317

1418
@override
1519
State<WorkspaceView> createState() => _WorkspaceViewState();
@@ -23,6 +27,10 @@ class _WorkspaceViewState extends State<WorkspaceView> {
2327
if (widget.colorList != null) {
2428
context.read<ConfigCubit>().setColors(widget.colorList!);
2529
}
30+
31+
if (widget.sprite != null) {
32+
context.read<SpriteCubit>().setSprite(widget.sprite!.pixels);
33+
}
2634
}
2735

2836
@override

packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:bloc_test/bloc_test.dart';
22
import 'package:flutter/material.dart';
33
import 'package:flutter_bloc/flutter_bloc.dart';
44
import 'package:flutter_test/flutter_test.dart';
5+
import 'package:mini_sprite/mini_sprite.dart';
56
import 'package:mini_sprite_editor/config/config.dart';
67
import 'package:mini_sprite_editor/hub/hub.dart';
78
import 'package:mini_sprite_editor/library/library.dart';
@@ -38,6 +39,7 @@ extension TestWidgetText on WidgetTester {
3839
required MapCubit mapCubit,
3940
required HubCubit hubCubit,
4041
List<Color>? colors,
42+
MiniSprite? sprite,
4143
}) async {
4244
await pumpApp(
4345
MultiBlocProvider(
@@ -64,7 +66,12 @@ extension TestWidgetText on WidgetTester {
6466
value: hubCubit,
6567
),
6668
],
67-
child: Scaffold(body: WorkspaceView(colorList: colors)),
69+
child: Scaffold(
70+
body: WorkspaceView(
71+
colorList: colors,
72+
sprite: sprite,
73+
),
74+
),
6875
),
6976
);
7077
}
@@ -196,5 +203,38 @@ void main() {
196203
.called(1);
197204
},
198205
);
206+
207+
testWidgets(
208+
'set the sprite when receiving one',
209+
(tester) async {
210+
_mockState(
211+
spriteState: SpriteState.initial(),
212+
toolsState: const ToolsState.initial(),
213+
configState: const ConfigState.initial(),
214+
libraryState: const LibraryState.initial(),
215+
workspaceState: const WorkspaceState.initial(),
216+
mapState: const MapState.initial(),
217+
);
218+
219+
const sprite = MiniSprite(
220+
[
221+
[1],
222+
[0],
223+
],
224+
);
225+
await tester.pumpTest(
226+
spriteCubit: spriteCubit,
227+
toolsCubit: toolsCubit,
228+
configCubit: configCubit,
229+
libraryCubit: libraryCubit,
230+
workspaceCubit: workspaceCubit,
231+
mapCubit: mapCubit,
232+
hubCubit: hubCubit,
233+
sprite: sprite,
234+
);
235+
236+
verify(() => spriteCubit.setSprite(sprite.pixels)).called(1);
237+
},
238+
);
199239
});
200240
}

0 commit comments

Comments
 (0)