Add : assets file (astrolabe logo), fonts file (Varela Round font), dependencies in pubspec.yaml (assets, fonts, provider, url_launcher), HomeLog.dart (login screen view)
This commit is contained in:
108
lib/main.dart
108
lib/main.dart
@@ -1,117 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'views/HomeLog.dart';
|
||||
|
||||
void main() {
|
||||
runApp(MyApp());
|
||||
}
|
||||
void main() => runApp(MyApp());
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
// This widget is the root of your application.
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Flutter Demo',
|
||||
theme: ThemeData(
|
||||
// This is the theme of your application.
|
||||
//
|
||||
// Try running your application with "flutter run". You'll see the
|
||||
// application has a blue toolbar. Then, without quitting the app, try
|
||||
// changing the primarySwatch below to Colors.green and then invoke
|
||||
// "hot reload" (press "r" in the console where you ran "flutter run",
|
||||
// or simply save your changes to "hot reload" in a Flutter IDE).
|
||||
// Notice that the counter didn't reset back to zero; the application
|
||||
// is not restarted.
|
||||
primarySwatch: Colors.blue,
|
||||
// This makes the visual density adapt to the platform that you run
|
||||
// the app on. For desktop platforms, the controls will be smaller and
|
||||
// closer together (more dense) than on mobile platforms.
|
||||
visualDensity: VisualDensity.adaptivePlatformDensity,
|
||||
),
|
||||
home: MyHomePage(title: 'Flutter Demo Home Page'),
|
||||
home: HomeLog(),
|
||||
debugShowCheckedModeBanner: false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MyHomePage extends StatefulWidget {
|
||||
MyHomePage({Key key, this.title}) : super(key: key);
|
||||
|
||||
// This widget is the home page of your application. It is stateful, meaning
|
||||
// that it has a State object (defined below) that contains fields that affect
|
||||
// how it looks.
|
||||
|
||||
// This class is the configuration for the state. It holds the values (in this
|
||||
// case the title) provided by the parent (in this case the App widget) and
|
||||
// used by the build method of the State. Fields in a Widget subclass are
|
||||
// always marked "final".
|
||||
|
||||
final String title;
|
||||
|
||||
@override
|
||||
_MyHomePageState createState() => _MyHomePageState();
|
||||
}
|
||||
|
||||
class _MyHomePageState extends State<MyHomePage> {
|
||||
int _counter = 0;
|
||||
|
||||
void _incrementCounter() {
|
||||
setState(() {
|
||||
// This call to setState tells the Flutter framework that something has
|
||||
// changed in this State, which causes it to rerun the build method below
|
||||
// so that the display can reflect the updated values. If we changed
|
||||
// _counter without calling setState(), then the build method would not be
|
||||
// called again, and so nothing would appear to happen.
|
||||
_counter++;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// This method is rerun every time setState is called, for instance as done
|
||||
// by the _incrementCounter method above.
|
||||
//
|
||||
// The Flutter framework has been optimized to make rerunning build methods
|
||||
// fast, so that you can just rebuild anything that needs updating rather
|
||||
// than having to individually change instances of widgets.
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
// Here we take the value from the MyHomePage object that was created by
|
||||
// the App.build method, and use it to set our appbar title.
|
||||
title: Text(widget.title),
|
||||
),
|
||||
body: Center(
|
||||
// Center is a layout widget. It takes a single child and positions it
|
||||
// in the middle of the parent.
|
||||
child: Column(
|
||||
// Column is also a layout widget. It takes a list of children and
|
||||
// arranges them vertically. By default, it sizes itself to fit its
|
||||
// children horizontally, and tries to be as tall as its parent.
|
||||
//
|
||||
// Invoke "debug painting" (press "p" in the console, choose the
|
||||
// "Toggle Debug Paint" action from the Flutter Inspector in Android
|
||||
// Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
|
||||
// to see the wireframe for each widget.
|
||||
//
|
||||
// Column has various properties to control how it sizes itself and
|
||||
// how it positions its children. Here we use mainAxisAlignment to
|
||||
// center the children vertically; the main axis here is the vertical
|
||||
// axis because Columns are vertical (the cross axis would be
|
||||
// horizontal).
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'You have pushed the button this many times:',
|
||||
),
|
||||
Text(
|
||||
'$_counter',
|
||||
style: Theme.of(context).textTheme.headline4,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: _incrementCounter,
|
||||
tooltip: 'Increment',
|
||||
child: Icon(Icons.add),
|
||||
), // This trailing comma makes auto-formatting nicer for build methods.
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
158
lib/views/HomeLog.dart
Normal file
158
lib/views/HomeLog.dart
Normal file
@@ -0,0 +1,158 @@
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class HomeLog extends StatefulWidget {
|
||||
@override
|
||||
_HomeLogState createState() => _HomeLogState();
|
||||
}
|
||||
|
||||
class _HomeLogState extends State<HomeLog> {
|
||||
TextStyle style = TextStyle(fontFamily: 'Varela Round', fontSize: 20.0);
|
||||
final GlobalKey<ScaffoldState> _globalKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: _globalKey,
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
height: MediaQuery.of(context).size.height,
|
||||
color: Colors.white,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(50),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
SizedBox(height: 40),
|
||||
_logoApp(),
|
||||
_titleApp(),
|
||||
SizedBox(height: 90),
|
||||
_emailField(),
|
||||
SizedBox(height: 30),
|
||||
_passwordField(),
|
||||
SizedBox(height: 50),
|
||||
_logButton(),
|
||||
SizedBox(height: 70),
|
||||
_enDIUrl(),
|
||||
SizedBox(height: 10),
|
||||
_astrolabeUrl()
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
Widget _logoApp() {
|
||||
return SizedBox(
|
||||
height: 100.0,
|
||||
child: Image.asset(
|
||||
"assets/astrolabe_logo.jpg",
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _titleApp() {
|
||||
return Text(
|
||||
"AstroNotes",
|
||||
style: style.copyWith(color: Colors.black, fontSize: 40),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _emailField() {
|
||||
return TextField(
|
||||
style: style,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
|
||||
labelText: "E-mail",
|
||||
border:
|
||||
OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _passwordField() {
|
||||
return TextField(
|
||||
style: style,
|
||||
obscureText: true,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
|
||||
labelText: "Mot de passe",
|
||||
border:
|
||||
OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _logButton() {
|
||||
return Material(
|
||||
elevation: 5.0,
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
color: Color(0xFF4A148C),
|
||||
child: MaterialButton(
|
||||
// minWidth: MediaQuery.of(context).size.width,
|
||||
padding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
|
||||
onPressed: () {},
|
||||
child: Text("Connexion",
|
||||
textAlign: TextAlign.center,
|
||||
style: style.copyWith(
|
||||
color: Colors.white, fontWeight: FontWeight.bold)),
|
||||
));
|
||||
}
|
||||
|
||||
void _launchLinkEnDI() async {
|
||||
const url = "https://endi.coop";
|
||||
|
||||
if (await canLaunch(url)) {
|
||||
await launch(url);
|
||||
} else {
|
||||
final snack = SnackBar(
|
||||
content: Text("Impossible de lancer le lien"),
|
||||
duration: Duration(seconds: 4),
|
||||
backgroundColor: Colors.red[300],
|
||||
);
|
||||
_globalKey.currentState.showSnackBar(snack);
|
||||
}
|
||||
}
|
||||
|
||||
void _launchLinkAstrolabe() async {
|
||||
const url = "https://astrolabe.coop";
|
||||
|
||||
if (await canLaunch(url)) {
|
||||
await launch(url);
|
||||
} else {
|
||||
final snack = SnackBar(
|
||||
content: Text("Impossible de lancer le lien"),
|
||||
duration: Duration(seconds: 4),
|
||||
backgroundColor: Colors.red[300],
|
||||
);
|
||||
_globalKey.currentState.showSnackBar(snack);
|
||||
}
|
||||
}
|
||||
|
||||
Widget _enDIUrl() {
|
||||
return InkWell(
|
||||
onTap: _launchLinkEnDI,
|
||||
child: Text(
|
||||
"En collaboration avec enDI",
|
||||
style: style.copyWith(
|
||||
color: Colors.black,
|
||||
fontSize: 15,
|
||||
decoration: TextDecoration.underline),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _astrolabeUrl() {
|
||||
return InkWell(
|
||||
onTap: _launchLinkAstrolabe,
|
||||
child: Text(
|
||||
"Développé par Astrolabe",
|
||||
style: style.copyWith(
|
||||
color: Colors.black,
|
||||
fontSize: 15,
|
||||
decoration: TextDecoration.underline),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user