| import 'package:flutter/material.dart'; |
| import 'package:flutter/rendering.dart'; |
| import 'package:flutter/services.dart'; |
| import 'package:flutter/widgets.dart'; |
| import 'package:flutter_sprites/flutter_sprites.dart'; |
| |
| AssetBundle _initBundle() { |
| if (rootBundle != null) |
| return rootBundle; |
| return new NetworkAssetBundle(Uri.base); |
| } |
| |
| final AssetBundle _bundle = _initBundle(); |
| |
| ImageMap _images; |
| SpriteSheet _spriteSheet; |
| |
| main() async { |
| _images = new ImageMap(_bundle); |
| |
| await _images.load([ |
| 'assets/checker.png', |
| 'assets/line_effects.png' |
| ]); |
| |
| assert(_images["assets/checker.png"] != null); |
| |
| runApp(new TestApp()); |
| } |
| |
| class TestApp extends StatefulComponent { |
| TestAppState createState() => new TestAppState(); |
| } |
| |
| final ThemeData _theme = new ThemeData( |
| brightness: ThemeBrightness.light, |
| primarySwatch: Colors.blue |
| ); |
| |
| class TestAppState extends State<TestApp> { |
| TestApp() { |
| _testBed = new TestBed(_labelTexts[_selectedLine]); |
| } |
| |
| TestBed _testBed; |
| int _selectedLine = 0; |
| |
| List<String> _labelTexts = [ |
| "Colored", |
| "Smoke", |
| "Electric", |
| "Rocket Trail" |
| ]; |
| |
| Widget build(BuildContext context) { |
| return new MaterialApp( |
| title: 'EffectLine Demo', |
| theme: _theme, |
| routes: { |
| '/': _buildColumn |
| } |
| ); |
| } |
| |
| Column _buildColumn(RouteArguments args) { |
| return new Column([ |
| new Flexible(child: _buildSpriteWidget()), |
| _buildTabBar() |
| ]); |
| } |
| |
| TabBar _buildTabBar() { |
| return new TabBar( |
| labels: _buildTabLabels(), |
| selectedIndex: _selectedLine, |
| onChanged: (int selectedLine) { |
| setState(() { |
| _selectedLine = selectedLine; |
| }); |
| } |
| ); |
| } |
| |
| List<TabLabel> _buildTabLabels() { |
| List<TabLabel> labels = []; |
| for(String text in _labelTexts) { |
| labels.add(new TabLabel(text: text)); |
| } |
| return labels; |
| } |
| |
| SpriteWidget _buildSpriteWidget() { |
| _testBed.setupLine(_labelTexts[_selectedLine]); |
| |
| return new SpriteWidget( |
| _testBed, |
| SpriteBoxTransformMode.letterbox |
| ); |
| } |
| } |
| |
| class TestBed extends NodeWithSize { |
| EffectLine _line; |
| |
| TestBed(String lineType) : super(new Size(1024.0, 1024.0)) { |
| userInteractionEnabled = true; |
| setupLine(lineType); |
| } |
| |
| void setupLine(String lineType) { |
| if (_line != null) { |
| _line.removeFromParent(); |
| } |
| |
| if (lineType == "Colored") { |
| // Create a line with no texture and a color sequence |
| _line = new EffectLine( |
| texture: null, |
| colorSequence: new ColorSequence.fromStartAndEndColor(new Color(0xaaffff00), new Color(0xaaff9900)), |
| widthMode: EffectLineWidthMode.barrel, |
| minWidth: 10.0, |
| maxWidth: 15.0, |
| fadeAfterDelay: 1.0, |
| fadeDuration: 1.0 |
| ); |
| } else if (lineType == "Smoke") { |
| Texture baseTexture = new Texture(_images['assets/line_effects.png']); |
| Texture smokyLineTexture = baseTexture.textureFromRect(new Rect.fromLTRB(0.0, 0.0, 1024.0, 128.0)); |
| |
| _line = new EffectLine( |
| texture: smokyLineTexture, |
| textureLoopLength: 300.0, |
| colorSequence: new ColorSequence.fromStartAndEndColor(new Color(0xffffffff), new Color(0x00ffffff)), |
| widthMode: EffectLineWidthMode.barrel, |
| minWidth: 20.0, |
| maxWidth: 80.0, |
| animationMode: EffectLineAnimationMode.scroll |
| ); |
| } else if (lineType == "Electric") { |
| Texture baseTexture = new Texture(_images['assets/line_effects.png']); |
| Texture electricLineTexture = baseTexture.textureFromRect(new Rect.fromLTRB(0.0, 384.0, 1024.0, 512.0)); |
| |
| _line = new EffectLine( |
| texture: electricLineTexture, |
| textureLoopLength: 300.0, |
| widthMode: EffectLineWidthMode.barrel, |
| minWidth: 20.0, |
| maxWidth: 100.0, |
| animationMode: EffectLineAnimationMode.random |
| ); |
| } else if (lineType == "Rocket Trail") { |
| Texture baseTexture = new Texture(_images['assets/line_effects.png']); |
| Texture trailLineTexture = baseTexture.textureFromRect(new Rect.fromLTRB(0.0, 896.0, 1024.0, 1024.0)); |
| |
| _line = new EffectLine( |
| texture: trailLineTexture, |
| textureLoopLength: 300.0, |
| widthMode: EffectLineWidthMode.barrel, |
| minWidth: 20.0, |
| maxWidth: 40.0, |
| widthGrowthSpeed: 40.0, |
| fadeAfterDelay: 0.5, |
| fadeDuration: 1.5 |
| ); |
| } |
| |
| addChild(_line); |
| } |
| |
| bool handleEvent(SpriteBoxEvent event) { |
| if (event.type == "pointerdown") _line.points = []; |
| |
| if (event.type == "pointerdown" || event.type == "pointermove") { |
| Point pos = convertPointToNodeSpace(event.boxPosition); |
| _line.addPoint(pos); |
| } |
| return true; |
| } |
| } |