import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import '../providers/settings.dart'; import '../scaffolds/simple.dart'; import '../utils/constants.dart'; import '../widgets/link.dart'; import '../widgets/loading.dart'; import '../models/account.dart'; import '../widgets/avatar.dart'; // import 'login_gitlab.dart'; class LoginScreen extends StatefulWidget { @override _LoginScreenState createState() => _LoginScreenState(); } class _LoginScreenState extends State { Widget _buildAccountItem(AccountModel account) { var settings = SettingsProvider.of(context); return Link( onTap: () { // Navigator.of(context).pop(); settings.setActiveAccount( account.platform, account.domain, account.login); }, child: Container( padding: EdgeInsets.all(10), decoration: BoxDecoration( border: Border(bottom: BorderSide(color: Colors.black12)), ), child: Row(children: [ Avatar(url: account.avatarUrl, size: 24), Padding(padding: EdgeInsets.only(left: 10)), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(account.login, style: TextStyle(fontSize: 20)), Padding(padding: EdgeInsets.only(top: 6)), Text(account.domain) ], ), ), (settings.activePlatform == account.platform && settings.activeDomain == account.domain && settings.activeLogin == account.login) ? Icon(Icons.check) : Container(), ]), ), ); } Widget _buildAddItem( {String text, Function onTap, WidgetBuilder screenBuilder}) { return Link( child: Container( padding: EdgeInsets.symmetric(vertical: 20), decoration: BoxDecoration( border: Border(bottom: BorderSide(color: Colors.black12)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.add), Text(text, style: TextStyle(fontSize: 16)), ], ), ), onTap: onTap, screenBuilder: screenBuilder, ); } @override Widget build(BuildContext context) { var settings = SettingsProvider.of(context); List accounts = []; settings.accountMap.forEach((platform, v0) { v0.forEach((domain, v1) { v1.forEach((login, v2) { accounts.add(AccountModel( avatarUrl: v2.avatarUrl, token: v2.token, platform: platform, domain: domain, login: login, )); }); }); }); return SimpleScaffold( title: Text('Select account'), bodyBuilder: () { if (settings.loading) { return Center(child: Loading()); } return Container( child: Column( children: settings.githubAccountMap.entries .map((entry) => _buildAccountItem(AccountModel( avatarUrl: entry.value.avatarUrl, token: entry.value.token, platform: PlatformType.github, domain: 'https://github.com', login: entry.key))) .toList() ..addAll(accounts.map(_buildAccountItem)) ..addAll([ _buildAddItem( text: 'GitHub Account', onTap: () { var state = settings.generateRandomString(); launch( 'https://github.com/login/oauth/authorize?client_id=$clientId&redirect_uri=gittouch://login&scope=user%20repo&state=$state', ); }, ), // _buildAddItem( // text: 'GitLab Account', // screenBuilder: (_) => LoginGitlabScreen(), // ) ]), ), ); }, ); } }