Skip to content
Snippets Groups Projects
Commit f0050cdd authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '4-draw-a-fixed-graph' into 'master'

Resolve "Draw a (fixed) graph"

Closes #4

See merge request !26
parents 3453d640 a1f0b19d
No related branches found
No related tags found
1 merge request!26Resolve "Draw a (fixed) graph"
Pipeline #3853 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=1.0.17 app.versionName=1.0.18
app.versionCode=18 app.versionCode=19
assets/menu/graph.png

16.2 KiB

...@@ -26,6 +26,7 @@ ICON_SIZE=192 ...@@ -26,6 +26,7 @@ ICON_SIZE=192
# Menu images # Menu images
AVAILABLE_MENU_IMAGES=" AVAILABLE_MENU_IMAGES="
demo demo
graph
" "
####################################################### #######################################################
......
<?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>
...@@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; ...@@ -4,6 +4,7 @@ import 'package:provider/provider.dart';
import 'package:random/provider/data.dart'; import 'package:random/provider/data.dart';
import 'package:random/screens/demo.dart'; import 'package:random/screens/demo.dart';
import 'package:random/screens/graph.dart';
import 'package:random/screens/home.dart'; import 'package:random/screens/home.dart';
void main() { void main() {
...@@ -19,7 +20,7 @@ class MyApp extends StatelessWidget { ...@@ -19,7 +20,7 @@ class MyApp extends StatelessWidget {
create: (BuildContext context) => Data(), create: (BuildContext context) => Data(),
child: Consumer<Data>(builder: (context, data, child) { child: Consumer<Data>(builder: (context, data, child) {
return MaterialApp( return MaterialApp(
title: 'Jeux de mots et lettres', title: 'Random application - testing stuff...',
theme: ThemeData( theme: ThemeData(
primarySwatch: Colors.blue, primarySwatch: Colors.blue,
), ),
...@@ -32,6 +33,12 @@ class MyApp extends StatelessWidget { ...@@ -32,6 +33,12 @@ class MyApp extends StatelessWidget {
builder: (context) => DemoPage(), builder: (context) => DemoPage(),
); );
} }
case '/graph':
{
return MaterialPageRoute(
builder: (context) => GraphPage(),
);
}
default: default:
{ {
......
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;
}
}
...@@ -4,6 +4,8 @@ import 'package:provider/provider.dart'; ...@@ -4,6 +4,8 @@ import 'package:provider/provider.dart';
import 'package:random/provider/data.dart'; import 'package:random/provider/data.dart';
class DemoPage extends StatelessWidget { class DemoPage extends StatelessWidget {
static String code = 'demo';
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Data myProvider = Provider.of<Data>(context); Data myProvider = Provider.of<Data>(context);
......
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,
),
),
),
);
}
}
...@@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; ...@@ -2,6 +2,8 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:random/provider/data.dart'; import 'package:random/provider/data.dart';
import 'package:random/screens/demo.dart';
import 'package:random/screens/graph.dart';
class Home extends StatelessWidget { class Home extends StatelessWidget {
static const String id = 'home'; static const String id = 'home';
...@@ -56,7 +58,8 @@ class Home extends StatelessWidget { ...@@ -56,7 +58,8 @@ class Home extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
_buildMenuItemContainer('demo', Colors.pink), _buildMenuItemContainer(DemoPage.code, Colors.pink),
_buildMenuItemContainer(GraphPage.code, Colors.lightBlue),
], ],
), ),
), ),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment