feat: add loading widget when receiving url scheme

This commit is contained in:
Rongjian Zhang 2019-02-10 13:17:25 +08:00
parent 6aa65b857f
commit e1170d411c
4 changed files with 135 additions and 123 deletions

View File

@ -67,6 +67,7 @@ class _SettingsProviderState extends State<SettingsProvider> {
Map<String, Account> githubAccountMap;
String activeLogin;
StreamSubscription<Uri> _sub;
bool loading = false;
Future<void> setTheme(int _theme) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
@ -103,6 +104,10 @@ class _SettingsProviderState extends State<SettingsProvider> {
// https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow
void _onSchemeDetected(Uri uri) async {
setState(() {
loading = true;
});
// get token by code
var code = uri.queryParameters['code'];
// print(code);
@ -144,7 +149,9 @@ class _SettingsProviderState extends State<SettingsProvider> {
print('write github: $githubData');
await prefs.setString('github', githubData);
setState(() {});
setState(() {
loading = false;
});
}
void _initDataFromPref() async {

View File

@ -4,6 +4,7 @@ import '../providers/settings.dart';
import '../scaffolds/simple.dart';
import '../utils/constants.dart';
import '../widgets/link.dart';
import '../widgets/loading.dart';
class LoginScreen extends StatefulWidget {
@override
@ -18,6 +19,10 @@ class _LoginScreenState extends State<LoginScreen> {
return SimpleScaffold(
title: Text('Select account'),
bodyBuilder: () {
if (settings.loading) {
return Center(child: Loading());
}
return Container(
child: Column(
children: settings.githubAccountMap.entries.map<Widget>((entry) {

View File

@ -20,12 +20,6 @@ void nextTick(Function callback, [int milliseconds = 0]) {
});
}
class Option<T> {
final T value;
final Widget widget;
Option({this.value, this.widget});
}
Future<bool> showConfirm(BuildContext context, String text) {
switch (SettingsProvider.of(context).theme) {
case ThemeMap.cupertino:
@ -81,7 +75,13 @@ Future<bool> showConfirm(BuildContext context, String text) {
}
}
Future<T> showOptions<T>(BuildContext context, List<Option<T>> options) {
class DialogOption<T> {
final T value;
final Widget widget;
DialogOption({this.value, this.widget});
}
Future<T> showOptions<T>(BuildContext context, List<DialogOption<T>> options) {
var builder = (BuildContext context) {
return CupertinoAlertDialog(
actions: options.map((option) {
@ -184,128 +184,128 @@ __typename
}
}
}
... on ReferencedEvent {
createdAt
isCrossRepository
actor {
login
}
commit {
oid
url
}
commitRepository {
owner {
login
}
name
}
}
... on ReferencedEvent {
createdAt
isCrossRepository
actor {
login
}
commit {
oid
url
}
commitRepository {
owner {
login
}
name
}
}
... on RenamedTitleEvent {
createdAt
previousTitle
currentTitle
actor {
login
}
}
... on RenamedTitleEvent {
createdAt
previousTitle
currentTitle
actor {
login
}
}
... on ClosedEvent {
createdAt
actor {
login
}
}
... on ClosedEvent {
createdAt
actor {
login
}
}
... on ReopenedEvent {
createdAt
actor {
login
}
}
... on ReopenedEvent {
createdAt
actor {
login
}
}
... on CrossReferencedEvent {
createdAt
actor {
login
}
source {
__typename
... on Issue {
number
repository {
owner {
login
}
name
}
}
... on PullRequest {
number
repository {
owner {
login
}
name
}
}
}
}
... on CrossReferencedEvent {
createdAt
actor {
login
}
source {
__typename
... on Issue {
number
repository {
owner {
login
}
name
}
}
... on PullRequest {
number
repository {
owner {
login
}
name
}
}
}
}
... on LabeledEvent {
createdAt
actor {
login
}
label {
name
color
}
}
... on LabeledEvent {
createdAt
actor {
login
}
label {
name
color
}
}
... on UnlabeledEvent {
createdAt
actor {
login
}
label {
name
color
}
}
... on UnlabeledEvent {
createdAt
actor {
login
}
label {
name
color
}
}
... on MilestonedEvent {
createdAt
actor {
login
}
milestoneTitle
}
... on LockedEvent {
createdAt
actor {
login
}
lockReason
}
... on UnlockedEvent {
createdAt
actor {
login
}
}
... on AssignedEvent {
createdAt
actor {
login
}
user {
login
}
}
... on MilestonedEvent {
createdAt
actor {
login
}
milestoneTitle
}
... on LockedEvent {
createdAt
actor {
login
}
lockReason
}
... on UnlockedEvent {
createdAt
actor {
login
}
}
... on AssignedEvent {
createdAt
actor {
login
}
user {
login
}
}
''';
var createWarning =

View File

@ -5,7 +5,7 @@ import '../providers/settings.dart';
class Loading extends StatelessWidget {
final bool more;
Loading({this.more});
Loading({this.more = false});
Widget _buildIndicator(BuildContext context) {
switch (SettingsProvider.of(context).theme) {