mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Merge pull request #3016 from vlidholt/linedrawing
Initial version of Fancy line drawer demo
This commit is contained in:
commit
4df24abb33
@ -24,3 +24,4 @@ assets:
|
|||||||
- packages/flutter_gallery_assets/jumpingjack.json
|
- packages/flutter_gallery_assets/jumpingjack.json
|
||||||
- packages/flutter_gallery_assets/jumpingjack.png
|
- packages/flutter_gallery_assets/jumpingjack.png
|
||||||
- packages/flutter_gallery_assets/grain.png
|
- packages/flutter_gallery_assets/grain.png
|
||||||
|
- packages/flutter_gallery_assets/fancylines.png
|
||||||
|
83
examples/material_gallery/lib/demo/drawing_demo.dart
Normal file
83
examples/material_gallery/lib/demo/drawing_demo.dart
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
// Copyright 2016 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 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
import 'package:flutter_sprites/flutter_sprites.dart';
|
||||||
|
|
||||||
|
class DrawingDemo extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_DrawingDemoState createState() => new _DrawingDemoState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DrawingDemoState extends State<DrawingDemo> {
|
||||||
|
_LineDrawingNode _rootNode;
|
||||||
|
ImageMap _images;
|
||||||
|
|
||||||
|
Future<Null> _loadAssets(AssetBundle bundle) async {
|
||||||
|
_images = new ImageMap(bundle);
|
||||||
|
await _images.load(<String>[
|
||||||
|
'packages/flutter_gallery_assets/fancylines.png'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_loadAssets(DefaultAssetBundle.of(context)).then((_) {
|
||||||
|
setState(() {
|
||||||
|
_rootNode = new _LineDrawingNode(_images);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
Widget body;
|
||||||
|
if (_rootNode == null) {
|
||||||
|
body = new Center(
|
||||||
|
child: new CircularProgressIndicator()
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
body = new SpriteWidget(_rootNode, SpriteBoxTransformMode.nativePoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Scaffold(
|
||||||
|
appBar: new AppBar(
|
||||||
|
title: new Text("Fancy Lines")
|
||||||
|
),
|
||||||
|
body: body
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LineDrawingNode extends NodeWithSize {
|
||||||
|
_LineDrawingNode(this._images) : super(const Size(1024.0, 1024.0)) {
|
||||||
|
userInteractionEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ImageMap _images;
|
||||||
|
EffectLine _currentLine;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool handleEvent(SpriteBoxEvent event) {
|
||||||
|
if (event.type == PointerDownEvent) {
|
||||||
|
_currentLine = new EffectLine(
|
||||||
|
texture: new Texture(_images['packages/flutter_gallery_assets/fancylines.png']),
|
||||||
|
colorSequence: new ColorSequence.fromStartAndEndColor(Colors.purple[500], Colors.purple[600]),
|
||||||
|
fadeAfterDelay: 3.0,
|
||||||
|
fadeDuration: 1.0
|
||||||
|
);
|
||||||
|
_currentLine.addPoint(event.boxPosition);
|
||||||
|
addChild(_currentLine);
|
||||||
|
} else if (event.type == PointerMoveEvent) {
|
||||||
|
_currentLine.addPoint(event.boxPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,7 @@ import '../demo/chip_demo.dart';
|
|||||||
import '../demo/date_picker_demo.dart';
|
import '../demo/date_picker_demo.dart';
|
||||||
import '../demo/dialog_demo.dart';
|
import '../demo/dialog_demo.dart';
|
||||||
import '../demo/drop_down_demo.dart';
|
import '../demo/drop_down_demo.dart';
|
||||||
|
import '../demo/drawing_demo.dart';
|
||||||
import '../demo/fitness_demo.dart';
|
import '../demo/fitness_demo.dart';
|
||||||
import '../demo/flexible_space_demo.dart';
|
import '../demo/flexible_space_demo.dart';
|
||||||
import '../demo/grid_list_demo.dart';
|
import '../demo/grid_list_demo.dart';
|
||||||
@ -80,6 +81,7 @@ class GalleryHomeState extends State<GalleryHome> {
|
|||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
new GalleryItem(title: "Weather", builder: () => new WeatherDemo()),
|
new GalleryItem(title: "Weather", builder: () => new WeatherDemo()),
|
||||||
new GalleryItem(title: "Fitness", builder: () => new FitnessDemo()),
|
new GalleryItem(title: "Fitness", builder: () => new FitnessDemo()),
|
||||||
|
new GalleryItem(title: "Fancy Lines", builder: () => new DrawingDemo()),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
new TwoLevelSublist(
|
new TwoLevelSublist(
|
||||||
|
@ -7,4 +7,4 @@ dependencies:
|
|||||||
path: ../../packages/flutter
|
path: ../../packages/flutter
|
||||||
flutter_sprites:
|
flutter_sprites:
|
||||||
path: ../../packages/flutter_sprites
|
path: ../../packages/flutter_sprites
|
||||||
flutter_gallery_assets: '0.0.12'
|
flutter_gallery_assets: '0.0.13'
|
||||||
|
@ -228,7 +228,7 @@ class SpriteBox extends RenderBox {
|
|||||||
// Check if this event should be dispatched
|
// Check if this event should be dispatched
|
||||||
if (node.handleMultiplePointers || event.pointer == node._handlingPointer) {
|
if (node.handleMultiplePointers || event.pointer == node._handlingPointer) {
|
||||||
// Dispatch event
|
// Dispatch event
|
||||||
bool consumedEvent = node.handleEvent(new SpriteBoxEvent(event.position, event.runtimeType, event.pointer));
|
bool consumedEvent = node.handleEvent(new SpriteBoxEvent(globalToLocal(event.position), event.runtimeType, event.pointer));
|
||||||
if (consumedEvent == null || consumedEvent)
|
if (consumedEvent == null || consumedEvent)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user