diff --git a/android/gradle.properties b/android/gradle.properties index a6742fa6ef44a10a2e9382d30dbde8e2665f2c91..53f7ea286da5b592c797927723a89c3f02454457 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=1.0.17 -app.versionCode=18 +app.versionName=1.0.18 +app.versionCode=19 diff --git a/assets/menu/graph.png b/assets/menu/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c2224c4ffd3fbe14013888af9fb706ce56c7603f Binary files /dev/null and b/assets/menu/graph.png differ diff --git a/icons/build_application_icons.sh b/icons/build_application_icons.sh index e8512e78b1e31d0e32b433bfc5c7717c89abac7a..776681baf185ca8163ad753482021eef3051919f 100755 --- a/icons/build_application_icons.sh +++ b/icons/build_application_icons.sh @@ -26,6 +26,7 @@ ICON_SIZE=192 # Menu images AVAILABLE_MENU_IMAGES=" demo +graph " ####################################################### diff --git a/icons/menu_graph.svg b/icons/menu_graph.svg new file mode 100644 index 0000000000000000000000000000000000000000..cb653f29ce50c75023682cf88c9b22563ef72e26 --- /dev/null +++ b/icons/menu_graph.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient id="radialGradient876" cx="51" cy="51" r="51" gradientUnits="userSpaceOnUse"><stop stop-color="#534fbc" offset=".53489"/><stop stop-color="#d5e834" offset="1"/></radialGradient></defs><rect x="1" y="1" width="100" height="100" ry="0" fill="url(#radialGradient876)" stroke="#000" stroke-width="2"/><path transform="translate(12.795 -12.378)" d="m41.231 66.406c1.2372-1.351 2.4315 1.0012 2.2454 2.0564-0.50427 2.8593-4.1113 3.4739-6.3581 2.4345-4.0191-1.8593-4.7114-7.1159-2.6236-10.66 3.0639-5.201 10.16-5.9833 14.962-2.8126 6.3992 4.226 7.2698 13.219 3.0017 19.263-5.371 7.6061-16.285 8.5638-23.565 3.1908-8.8179-6.5075-9.8622-19.354-3.3798-27.867 7.6392-10.033 22.425-11.163 32.169-3.5689 11.249 8.768 12.466 25.498 3.758 36.471-9.8949 12.468-28.572 13.77-40.772 3.947-13.687-11.02-15.076-31.647-4.1361-45.074 12.145-14.906 34.723-16.381 49.376-4.3252" fill="none" stroke="#000" stroke-linecap="round" stroke-width="6"/></svg> diff --git a/lib/main.dart b/lib/main.dart index 10751510ec1e00e9d66bcff90bc80ad7c140c251..b45097a814031b90c2bb831e08a758ae06024670 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import 'package:random/provider/data.dart'; import 'package:random/screens/demo.dart'; +import 'package:random/screens/graph.dart'; import 'package:random/screens/home.dart'; void main() { @@ -19,7 +20,7 @@ class MyApp extends StatelessWidget { create: (BuildContext context) => Data(), child: Consumer<Data>(builder: (context, data, child) { return MaterialApp( - title: 'Jeux de mots et lettres', + title: 'Random application - testing stuff...', theme: ThemeData( primarySwatch: Colors.blue, ), @@ -32,6 +33,12 @@ class MyApp extends StatelessWidget { builder: (context) => DemoPage(), ); } + case '/graph': + { + return MaterialPageRoute( + builder: (context) => GraphPage(), + ); + } default: { diff --git a/lib/painters/graph_painter.dart b/lib/painters/graph_painter.dart new file mode 100644 index 0000000000000000000000000000000000000000..38c12994462fd13de15529a993bf6adbcba5ff91 --- /dev/null +++ b/lib/painters/graph_painter.dart @@ -0,0 +1,42 @@ +import 'dart:math'; +import 'package:flutter/material.dart'; + +import 'package:random/provider/data.dart'; + +class GraphPainter extends CustomPainter { + const GraphPainter(this.myProvider); + + final Data myProvider; + + double random(double max) { + return Random().nextDouble() * max; + } + + @override + void paint(Canvas canvas, Size size) { + // Fill background + final paintBackground = Paint(); + paintBackground.color = Colors.black; + paintBackground.style = PaintingStyle.fill; + + final Rect rectBackground = Rect.fromPoints(Offset(0, 0), Offset(size.width, size.height)); + canvas.drawRect(rectBackground, paintBackground); + + // Draw some lines + final paintLine = Paint(); + paintLine.color = Colors.red; + paintLine.style = PaintingStyle.fill; + + int linesCount = 500; + for (int i = 0; i < linesCount; i++) { + Offset lineStart = Offset(random(size.width), random(size.height)); + Offset lineStop = Offset(random(size.width), random(size.height)); + canvas.drawLine(lineStart, lineStop, paintLine); + } + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/screens/demo.dart b/lib/screens/demo.dart index 82e0985d3dc2f78072874872fb4a519039458956..a9c565652a7eee02dc876cbf1b5930601633b0a5 100644 --- a/lib/screens/demo.dart +++ b/lib/screens/demo.dart @@ -4,6 +4,8 @@ import 'package:provider/provider.dart'; import 'package:random/provider/data.dart'; class DemoPage extends StatelessWidget { + static String code = 'demo'; + @override Widget build(BuildContext context) { Data myProvider = Provider.of<Data>(context); diff --git a/lib/screens/graph.dart b/lib/screens/graph.dart new file mode 100644 index 0000000000000000000000000000000000000000..9a0ca153a1ba263010e1244e270901c64763c4fe --- /dev/null +++ b/lib/screens/graph.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:random/painters/graph_painter.dart'; + +import 'package:random/provider/data.dart'; + +class GraphPage extends StatelessWidget { + static String code = 'graph'; + + @override + Widget build(BuildContext context) { + Data myProvider = Provider.of<Data>(context); + double boardWidth = MediaQuery.of(context).size.width; + + Scaffold pageContent = Scaffold( + appBar: AppBar( + elevation: 0, + actions: <Widget>[], + ), + backgroundColor: Colors.blue, + body: SafeArea( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Center( + child: GestureDetector( + onTapUp: (details) { + double xTap = details.localPosition.dx; + double yTap = details.localPosition.dy; + print('[' + xTap.toString() + ',' + yTap.toString() + ']'); + }, + child: Container( + margin: EdgeInsets.all(4), + padding: EdgeInsets.all(4), + child: CustomPaint( + size: Size(boardWidth, boardWidth), + willChange: false, + painter: GraphPainter(myProvider), + isComplex: true, + ), + ), + ), + ), + ], + ), + ), + ); + + return SizedBox.expand( + child: Container( + child: FittedBox( + fit: BoxFit.contain, + alignment: Alignment.center, + child: SizedBox( + height: (MediaQuery.of(context).size.height), + width: (MediaQuery.of(context).size.width), + child: pageContent, + ), + ), + ), + ); + } +} diff --git a/lib/screens/home.dart b/lib/screens/home.dart index d8705c7f5faabaefd9b865d9d8476ecaa0fbc93e..2dd7dd607e835816dfbd6ac1436ee3f2e7b94888 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:random/provider/data.dart'; +import 'package:random/screens/demo.dart'; +import 'package:random/screens/graph.dart'; class Home extends StatelessWidget { static const String id = 'home'; @@ -56,7 +58,8 @@ class Home extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: <Widget>[ - _buildMenuItemContainer('demo', Colors.pink), + _buildMenuItemContainer(DemoPage.code, Colors.pink), + _buildMenuItemContainer(GraphPage.code, Colors.lightBlue), ], ), ),