mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-02 11:43:19 +08:00
Adding Images#fromBase64
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
## [next]
|
## [next]
|
||||||
|
- Adding method to load image bases on base64 data url.
|
||||||
|
|
||||||
## 0.20.0
|
## 0.20.0
|
||||||
- Refactor game.dart classes into separate files
|
- Refactor game.dart classes into separate files
|
||||||
|
|||||||
1
doc/examples/sprites/.gitignore
vendored
1
doc/examples/sprites/.gitignore
vendored
@ -72,3 +72,4 @@
|
|||||||
macos
|
macos
|
||||||
test
|
test
|
||||||
.flutter-plugins-dependencies
|
.flutter-plugins-dependencies
|
||||||
|
web
|
||||||
|
|||||||
16
doc/examples/sprites/lib/generated_plugin_registrant.dart
Normal file
16
doc/examples/sprites/lib/generated_plugin_registrant.dart
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// Generated file. Do not edit.
|
||||||
|
//
|
||||||
|
|
||||||
|
// ignore: unused_import
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
import 'package:audioplayers/audioplayers_web.dart';
|
||||||
|
|
||||||
|
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
|
||||||
|
|
||||||
|
// ignore: public_member_api_docs
|
||||||
|
void registerPlugins(PluginRegistry registry) {
|
||||||
|
AudioplayersPlugin.registerWith(registry.registrarFor(AudioplayersPlugin));
|
||||||
|
registry.registerMessageHandler();
|
||||||
|
}
|
||||||
32
doc/examples/sprites/lib/main_base64.dart
Normal file
32
doc/examples/sprites/lib/main_base64.dart
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import 'package:flutter/material.dart' hide Image;
|
||||||
|
|
||||||
|
import 'package:flame/flame.dart';
|
||||||
|
import 'package:flame/sprite.dart';
|
||||||
|
import 'package:flame/game.dart';
|
||||||
|
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
void main() async {
|
||||||
|
const exampleUrl =
|
||||||
|
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4jYWTMQ7DIAxFIeoNuAGK1K1ISL0DMwOHzNC5p6iUPeoNOEM7GZnPJ/EUbP7Lx7KtIfH91B/L++gs5m5M9NreTN/dEZiVghatwbXvY68UlksyPjprRaxFGAJZg+uAuSSzzC7rEDirDYAz2wg0RjWRFa/EUwdnQnQ37QFe1Odjrw04AKTTaBXPAlx8dDaXdNk4rMsc0B7ge/UcYLTZxoFizxCQ/L0DMAhaX4Mzj/uzW6phu3AvtHUUU4BAWJ6t8x9N/HHcruXjwQAAAABJRU5ErkJggg==';
|
||||||
|
|
||||||
|
final image = await Flame.images.fromBase64('shield.png', exampleUrl);
|
||||||
|
|
||||||
|
runApp(MyGame(image).widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyGame extends Game {
|
||||||
|
Sprite _sprite;
|
||||||
|
|
||||||
|
MyGame(Image image) {
|
||||||
|
_sprite = Sprite.fromImage(image);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void update(dt) {}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void render(Canvas canvas) {
|
||||||
|
_sprite.renderRect(canvas, const Rect.fromLTWH(100, 100, 100, 100));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
import 'dart:convert' show base64;
|
||||||
|
|
||||||
import 'package:flame/flame.dart';
|
import 'package:flame/flame.dart';
|
||||||
|
|
||||||
@ -26,9 +27,26 @@ class Images {
|
|||||||
return loadedFiles[fileName];
|
return loadedFiles[fileName];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Image> fromBase64(String fileName, String base64) async {
|
||||||
|
if (!loadedFiles.containsKey(fileName)) {
|
||||||
|
loadedFiles[fileName] = await _fetchFromBase64(base64);
|
||||||
|
}
|
||||||
|
return loadedFiles[fileName];
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Image> _fetchFromBase64(String base64Data) async {
|
||||||
|
final data = base64Data.substring(base64Data.indexOf(',') + 1);
|
||||||
|
final Uint8List bytes = base64.decode(data);
|
||||||
|
return _loadBytes(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
Future<Image> _fetchToMemory(String name) async {
|
Future<Image> _fetchToMemory(String name) async {
|
||||||
final ByteData data = await Flame.bundle.load('assets/images/' + name);
|
final ByteData data = await Flame.bundle.load('assets/images/' + name);
|
||||||
final Uint8List bytes = Uint8List.view(data.buffer);
|
final Uint8List bytes = Uint8List.view(data.buffer);
|
||||||
|
return _loadBytes(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Image> _loadBytes(Uint8List bytes) {
|
||||||
final Completer<Image> completer = Completer();
|
final Completer<Image> completer = Completer();
|
||||||
decodeImageFromList(bytes, (image) => completer.complete(image));
|
decodeImageFromList(bytes, (image) => completer.complete(image));
|
||||||
return completer.future;
|
return completer.future;
|
||||||
|
|||||||
Reference in New Issue
Block a user