| // 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; |
| } |
| } |