Skip to content

Commit 31732bd

Browse files
committed
Add a basic Flutter counter app
0 parents  commit 31732bd

File tree

9 files changed

+211
-0
lines changed

9 files changed

+211
-0
lines changed

.devcontainer/Dockerfile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FROM debian:stretch
2+
3+
RUN apt-get update && apt-get -y install git curl unzip
4+
5+
RUN apt-get autoremove -y \
6+
&& apt-get clean -y \
7+
&& rm -rf /var/lib/apt/lists/*
8+
9+
RUN mkdir /home/codespace
10+
WORKDIR /home/codespace
11+
12+
ENV PUB_CACHE=/home/codespace/.pub_cache
13+
ENV PATH="/home/codespace/flutter/bin:$PATH"
14+
15+
RUN git clone https://github.com/flutter/flutter && \
16+
/home/codespace/flutter/bin/flutter config --enable-web

.devcontainer/devcontainer.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"build": {
3+
"dockerfile": "Dockerfile"
4+
},
5+
"name": "Flutter",
6+
"extensions": [
7+
"Dart-Code.dart-code",
8+
"Dart-Code.flutter"
9+
],
10+
}

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.dart_tool/
2+
.DS_Store
3+
.packages
4+
build/
5+
doc/api/
6+
pubspec.lock

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"dart.flutterRunLogFile": "logs/flutter_run.txt",
3+
"dart.vmServiceLogFile": "logs/observatory.txt",
4+
"dart.extensionLogFile": "logs/extension.txt",
5+
}

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
A sample Flutter web project for using on GitHub Codespaces.
2+
3+
In order to use debugging, you'll need to use Chrome with the [Dart Debug extension](https://chrome.google.com/webstore/detail/dart-debug-extension/eljbmlghnomdjgdjmbdekegdkbabckhm?hl=en) installed.
4+
5+
- TODO: instructions

lib/main.dart

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
import 'package:flutter/material.dart';
2+
3+
void main() => runApp(MyApp());
4+
5+
class MyApp extends StatelessWidget {
6+
// This widget is the root of your application.
7+
@override
8+
Widget build(BuildContext context) {
9+
return MaterialApp(
10+
title: 'Flutter Demo',
11+
theme: ThemeData(
12+
// This is the theme of your application.
13+
//
14+
// Try running your application with "flutter run". You'll see the
15+
// application has a blue toolbar. Then, without quitting the app, try
16+
// changing the primarySwatch below to Colors.green and then invoke
17+
// "hot reload" (press "r" in the console where you ran "flutter run",
18+
// or simply save your changes to "hot reload" in a Flutter IDE).
19+
// Notice that the counter didn't reset back to zero; the application
20+
// is not restarted.
21+
primarySwatch: Colors.blue,
22+
),
23+
home: MyHomePage(title: 'Flutter Demo Home Page'),
24+
);
25+
}
26+
}
27+
28+
class MyHomePage extends StatefulWidget {
29+
MyHomePage({Key key, this.title}) : super(key: key);
30+
31+
// This widget is the home page of your application. It is stateful, meaning
32+
// that it has a State object (defined below) that contains fields that affect
33+
// how it looks.
34+
35+
// This class is the configuration for the state. It holds the values (in this
36+
// case the title) provided by the parent (in this case the App widget) and
37+
// used by the build method of the State. Fields in a Widget subclass are
38+
// always marked "final".
39+
40+
final String title;
41+
42+
@override
43+
_MyHomePageState createState() => _MyHomePageState();
44+
}
45+
46+
class _MyHomePageState extends State<MyHomePage> {
47+
int _counter = 0;
48+
49+
void _incrementCounter() {
50+
setState(() {
51+
// This call to setState tells the Flutter framework that something has
52+
// changed in this State, which causes it to rerun the build method below
53+
// so that the display can reflect the updated values. If we changed
54+
// _counter without calling setState(), then the build method would not be
55+
// called again, and so nothing would appear to happen.
56+
_counter++;
57+
});
58+
}
59+
60+
@override
61+
Widget build(BuildContext context) {
62+
// This method is rerun every time setState is called, for instance as done
63+
// by the _incrementCounter method above.
64+
//
65+
// The Flutter framework has been optimized to make rerunning build methods
66+
// fast, so that you can just rebuild anything that needs updating rather
67+
// than having to individually change instances of widgets.
68+
return Scaffold(
69+
appBar: AppBar(
70+
// Here we take the value from the MyHomePage object that was created by
71+
// the App.build method, and use it to set our appbar title.
72+
title: Text(widget.title),
73+
),
74+
body: Center(
75+
// Center is a layout widget. It takes a single child and positions it
76+
// in the middle of the parent.
77+
child: Column(
78+
// Column is also a layout widget. It takes a list of children and
79+
// arranges them vertically. By default, it sizes itself to fit its
80+
// children horizontally, and tries to be as tall as its parent.
81+
//
82+
// Invoke "debug painting" (press "p" in the console, choose the
83+
// "Toggle Debug Paint" action from the Flutter Inspector in Android
84+
// Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
85+
// to see the wireframe for each widget.
86+
//
87+
// Column has various properties to control how it sizes itself and
88+
// how it positions its children. Here we use mainAxisAlignment to
89+
// center the children vertically; the main axis here is the vertical
90+
// axis because Columns are vertical (the cross axis would be
91+
// horizontal).
92+
mainAxisAlignment: MainAxisAlignment.center,
93+
children: <Widget>[
94+
Text(
95+
'You have pushed the button this many times:',
96+
),
97+
Text(
98+
'$_counter',
99+
style: Theme.of(context).textTheme.display1,
100+
),
101+
],
102+
),
103+
),
104+
floatingActionButton: FloatingActionButton(
105+
onPressed: _incrementCounter,
106+
tooltip: 'Increment',
107+
child: Icon(Icons.add),
108+
), // This trailing comma makes auto-formatting nicer for build methods.
109+
);
110+
}
111+
}

pubspec.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: github_codespaces_flutter_web
2+
description: A sample Flutter web application.
3+
version: 1.0.0
4+
homepage: https://github.com/DanTup/github-codespaces-flutter-web
5+
author: Danny Tuppeny <[email protected]>
6+
7+
environment:
8+
sdk: ">=2.1.0 <3.0.0"
9+
10+
dependencies:
11+
flutter:
12+
sdk: flutter
13+
14+
dev_dependencies:
15+
flutter_test:
16+
sdk: flutter
17+
18+
flutter:
19+
uses-material-design: true

test/widget_test.dart

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// This is a basic Flutter widget test.
2+
//
3+
// To perform an interaction with a widget in your test, use the WidgetTester
4+
// utility that Flutter provides. For example, you can send tap and scroll
5+
// gestures. You can also use WidgetTester to find child widgets in the widget
6+
// tree, read text, and verify that the values of widget properties are correct.
7+
8+
import 'package:flutter/material.dart';
9+
import 'package:flutter_test/flutter_test.dart';
10+
import 'package:github_codespaces_flutter_web/main.dart';
11+
12+
void main() {
13+
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14+
// Build our app and trigger a frame.
15+
await tester.pumpWidget(MyApp());
16+
17+
// Verify that our counter starts at 0.
18+
expect(find.text('0'), findsOneWidget);
19+
expect(find.text('1'), findsNothing);
20+
21+
// Tap the '+' icon and trigger a frame.
22+
await tester.tap(find.byIcon(Icons.add));
23+
await tester.pump();
24+
25+
// Verify that our counter has incremented.
26+
expect(find.text('0'), findsNothing);
27+
expect(find.text('1'), findsOneWidget);
28+
});
29+
}

web/index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>github_codespaces_flutter_web</title>
6+
</head>
7+
<body>
8+
<script src="main.dart.js" type="application/javascript"></script>
9+
</body>
10+
</html>

0 commit comments

Comments
 (0)