mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

Similar to widgets.dart, rendering.dart exports the entire rendering layer. Also, update the examples to use rendering.dart and widgets.dart. Also clean up some exports so that the examples have more sensible imports.
101 lines
2.8 KiB
Dart
101 lines
2.8 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:mojo/mojo/url_response.mojom.dart';
|
|
import 'package:sky_services/media/media.mojom.dart';
|
|
import 'package:sky/mojo/net/fetch.dart';
|
|
import 'package:sky/mojo/shell.dart' as shell;
|
|
import 'package:sky/rendering.dart';
|
|
import 'package:sky/theme/colors.dart' as colors;
|
|
import 'package:sky/widgets.dart';
|
|
|
|
// All of these sounds are marked as public domain at soundbible.
|
|
const String chimes = "http://soundbible.com/grab.php?id=2030&type=wav";
|
|
const String chainsaw = "http://soundbible.com/grab.php?id=1391&type=wav";
|
|
const String stag = "http://soundbible.com/grab.php?id=2073&type=wav";
|
|
const String frogs = "http://soundbible.com/grab.php?id=2033&type=wav";
|
|
const String rattle = "http://soundbible.com/grab.php?id=2037&type=wav";
|
|
const String iLoveYou = "http://soundbible.com/grab.php?id=2045&type=wav";
|
|
|
|
class Key {
|
|
Key(this.color, this.soundUrl);
|
|
|
|
final Color color;
|
|
final String soundUrl;
|
|
MediaPlayerProxy player;
|
|
|
|
EventDisposition down() {
|
|
if (player == null)
|
|
return EventDisposition.ignored;
|
|
player.ptr.seekTo(0);
|
|
player.ptr.start();
|
|
return EventDisposition.processed;
|
|
}
|
|
|
|
EventDisposition up() {
|
|
if (player == null)
|
|
return EventDisposition.ignored;
|
|
player.ptr.pause();
|
|
return EventDisposition.processed;
|
|
}
|
|
}
|
|
|
|
class PianoApp extends App {
|
|
final List<Key> keys = [
|
|
new Key(colors.Red[500], chimes),
|
|
new Key(colors.Orange[500], chainsaw),
|
|
new Key(colors.Yellow[500], stag),
|
|
new Key(colors.Green[500], frogs),
|
|
new Key(colors.Blue[500], rattle),
|
|
new Key(colors.Purple[500], iLoveYou),
|
|
];
|
|
|
|
PianoApp() {
|
|
loadSounds();
|
|
}
|
|
|
|
loadSounds() async {
|
|
MediaServiceProxy mediaService = new MediaServiceProxy.unbound();
|
|
shell.requestService(null, mediaService);
|
|
|
|
for (Key key in keys) {
|
|
MediaPlayerProxy player = new MediaPlayerProxy.unbound();
|
|
mediaService.ptr.createPlayer(player);
|
|
|
|
UrlResponse response = await fetchUrl(key.soundUrl);
|
|
await player.ptr.prepare(response.body);
|
|
key.player = player;
|
|
}
|
|
mediaService.close();
|
|
// Are we leaking all the player connections?
|
|
}
|
|
|
|
Widget build() {
|
|
List<Widget> children = [];
|
|
for (Key key in keys) {
|
|
children.add(
|
|
new Listener(
|
|
child: new Flexible(
|
|
child: new Container(
|
|
decoration: new BoxDecoration(backgroundColor: key.color)
|
|
)
|
|
),
|
|
onPointerCancel: (_) => key.up(),
|
|
onPointerDown: (_) => key.down(),
|
|
onPointerUp: (_) => key.up()
|
|
)
|
|
);
|
|
}
|
|
|
|
return new Flex(
|
|
children,
|
|
direction: FlexDirection.vertical
|
|
);
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
runApp(new PianoApp());
|
|
}
|