Initial project commit

This commit is contained in:
2022-01-24 21:39:14 +01:00
commit 1e673781cd
20 changed files with 848 additions and 0 deletions

91
lib/Content.dart Normal file
View File

@@ -0,0 +1,91 @@
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class Content extends StatefulWidget {
const Content({Key? key}) : super(key: key);
@override
_ContentState createState() => _ContentState();
}
class _ContentState extends State<Content> {
String? _coordinates;
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: Text("Test coordinates"),
onPressed: () async {
try {
_coordinates = (await _getLocationAsync()).toString();
setState(() {});
} catch (e) {
_coordinates = e.toString();
setState(() {});
}
},
),
_coordinates != null
? Text(_coordinates!.toString())
: const SizedBox(),
],
),
);
}
Future<Position> _getLocationAsync() async {
bool serviceEnabled;
LocationPermission permission;
showDialog<void>(
context: context,
builder: (BuildContext dialogContext) {
return const SimpleDialog(
children: [
Center(
child: CircularProgressIndicator(),
),
],
);
},
);
// Test if location services are enabled.
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
// Location services are not enabled don't continue
// accessing the position and request users of the
// App to enable the location services.
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
// Permissions are denied, next time you could try
// requesting permissions again (this is also where
// Android's shouldShowRequestPermissionRationale
// returned true. According to Android guidelines
// your App should show an explanatory UI now.
return Future.error('Location permissions are denied');
}
}
if (permission == LocationPermission.deniedForever) {
// Permissions are denied forever, handle appropriately.
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
// When we reach here, permissions are granted and we can
// continue accessing the position of the device.
var position = await Geolocator.getCurrentPosition();
Navigator.pop(context);
return position;
}
}

66
lib/login.dart Normal file
View File

@@ -0,0 +1,66 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_pwa_test/Content.dart';
class Login extends StatelessWidget {
static const String _password = "SGVsbG9Xb3JsZCE=";
Login({Key? key, required this.loginCallback}) : super(key: key);
final VoidCallback loginCallback;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Center(
child: Form(
key: _formKey,
autovalidateMode: AutovalidateMode.disabled,
child: Column(
children: [
Container(
constraints: const BoxConstraints(maxWidth: 500),
child: TextFormField(
decoration: const InputDecoration(
labelText: "Password",
hintText: "Password",
alignLabelWithHint: true,
border: OutlineInputBorder(),
),
validator: (s) {
if (s == null) {
return "Please provide a value";
}
var encoded = base64Encode(utf8.encode(s));
print(encoded);
if (encoded != _password) {
return "Password is wrong";
}
return null;
},
),
),
const SizedBox(height: 16.0),
ElevatedButton(
onPressed: () async {
var result = _formKey.currentState?.validate();
if (result == null || !result) {
print(
"Could not validate password because of an internal error");
return;
}
loginCallback();
},
child: const Text("Ok"),
)
],
),
),
);
}
}

59
lib/main.dart Normal file
View File

@@ -0,0 +1,59 @@
import 'package:flutter/material.dart';
import 'package:flutter_pwa_test/Content.dart';
import 'package:flutter_pwa_test/login.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
debugShowCheckedModeBanner: false,
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late Widget _content;
@override
void initState() {
super.initState();
_content = Login(loginCallback: () {
setState(() {
_content = const Content();
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: _content,
),
);
}
}