// Copyright 2018-present the Flutter authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import 'package:flutter/material.dart'; import 'package:flutter_gallery/demo/shrine/colors.dart'; class LoginPage extends StatefulWidget { @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State { final TextEditingController _usernameController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( elevation: 0.0, backgroundColor: Colors.white, brightness: Brightness.light, leading: IconButton( icon: const BackButtonIcon(), tooltip: MaterialLocalizations.of(context).backButtonTooltip, onPressed: () { // The login screen is immediately displayed on top of the Shrine // home screen using onGenerateRoute and so rootNavigator must be // set to true in order to get out of Shrine completely. Navigator.of(context, rootNavigator: true).pop(); }, ), ), body: SafeArea( child: ListView( padding: const EdgeInsets.symmetric(horizontal: 24.0), children: [ const SizedBox(height: 80.0), Column( children: [ Image.asset('packages/shrine_images/diamond.png'), const SizedBox(height: 16.0), Text( 'SHRINE', style: Theme.of(context).textTheme.headline, ), ], ), const SizedBox(height: 120.0), PrimaryColorOverride( color: kShrineBrown900, child: TextField( controller: _usernameController, decoration: const InputDecoration( labelText: 'Username', ), ), ), const SizedBox(height: 12.0), PrimaryColorOverride( color: kShrineBrown900, child: TextField( controller: _passwordController, decoration: const InputDecoration( labelText: 'Password', ), ), ), Wrap( children: [ ButtonBar( children: [ FlatButton( child: const Text('CANCEL'), shape: const BeveledRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(7.0)), ), onPressed: () { // The login screen is immediately displayed on top of // the Shrine home screen using onGenerateRoute and so // rootNavigator must be set to true in order to get out // of Shrine completely. Navigator.of(context, rootNavigator: true).pop(); }, ), RaisedButton( child: const Text('NEXT'), elevation: 8.0, shape: const BeveledRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(7.0)), ), onPressed: () { Navigator.pop(context); }, ), ], ), ], ), ], ), ), ); } } class PrimaryColorOverride extends StatelessWidget { const PrimaryColorOverride({Key key, this.color, this.child}) : super(key: key); final Color color; final Widget child; @override Widget build(BuildContext context) { return Theme( child: child, data: Theme.of(context).copyWith(primaryColor: color), ); } }