Skip to content

Commit

Permalink
fix: material actions style
Browse files Browse the repository at this point in the history
  • Loading branch information
pd4d10 committed Sep 28, 2019
1 parent 9487cc1 commit eadef89
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 34 deletions.
17 changes: 2 additions & 15 deletions lib/models/theme.dart
Expand Up @@ -198,11 +198,12 @@ class ThemeModel with ChangeNotifier {
showPicker(BuildContext context, PickerGroupItem<String> groupItem) async {
switch (theme) {
case AppThemeType.cupertino:
default:
await showCupertinoModalPopup<void>(
context: context,
builder: (context) {
return Container(
height: 300,
height: 216,
child: CupertinoPicker(
backgroundColor: CupertinoColors.white,
children: groupItem.items.map((v) => Text(v.text)).toList(),
Expand All @@ -222,20 +223,6 @@ class ThemeModel with ChangeNotifier {
);
},
);
break;
default:
final value = await showMenu(
context: context,
initialValue: groupItem.value,
items: groupItem.items
.map((item) =>
PopupMenuItem(value: item.value, child: Text(item.text)))
.toList(),
position: RelativeRect.fill,
);
if (value != null) {
groupItem.onChange(value);
}
}
}
}
Expand Up @@ -8,11 +8,11 @@ import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/picker.dart';
import 'package:provider/provider.dart';

class CodeSettingsScreen extends StatelessWidget {
class CodeThemeScreen extends StatelessWidget {
final String code;
final String language;

CodeSettingsScreen(this.code, this.language);
CodeThemeScreen(this.code, this.language);

@override
Widget build(BuildContext context) {
Expand Down
18 changes: 11 additions & 7 deletions lib/screens/object.dart
@@ -1,9 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter_highlight/theme_map.dart';
import 'package:git_touch/models/code.dart';
import 'package:git_touch/models/theme.dart';
import 'package:git_touch/scaffolds/refresh_stateful.dart';
import 'package:git_touch/screens/code_settings.dart';
import 'package:git_touch/screens/code_theme.dart';
import 'package:git_touch/screens/image_view.dart';
import 'package:git_touch/widgets/action_entry.dart';
import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/link.dart';
import 'package:git_touch/widgets/markdown_view.dart';
Expand Down Expand Up @@ -172,12 +174,14 @@ class ObjectScreen extends StatelessWidget {
trailingBuilder: (payload) {
switch (type) {
case 'blob':
return Link(
child: Icon(Octicons.settings, size: 20),
material: false,
screenBuilder: payload == null
? null
: (_) => CodeSettingsScreen(payload['text'], _language),
return ActionEntry(
iconData: Octicons.settings,
onTap: () {
if (payload != null) {
Provider.of<ThemeModel>(context).pushRoute(context,
(_) => CodeThemeScreen(payload['text'], _language));
}
},
);
default:
return null;
Expand Down
23 changes: 17 additions & 6 deletions lib/screens/user.dart
@@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/models/theme.dart';
import 'package:git_touch/scaffolds/refresh_stateful.dart';
import 'package:git_touch/screens/repositories.dart';
import 'package:git_touch/widgets/action_entry.dart';
import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/table_view.dart';
import 'package:git_touch/widgets/text_contains_organization.dart';
Expand Down Expand Up @@ -89,12 +91,14 @@ class UserScreen extends StatelessWidget {
return [
borderView1,
if (title != null) TableViewHeader(title),
borderView,
...join(
borderView,
items.map((item) {
return RepositoryItem(item);
}).toList(),
)
),
borderView,
];
}

Expand Down Expand Up @@ -127,6 +131,7 @@ class UserScreen extends StatelessWidget {
});

return Container(
color: Colors.white,
padding: EdgeInsets.all(10),
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
Expand All @@ -147,11 +152,13 @@ class UserScreen extends StatelessWidget {
title: AppBarTitle('User'),
trailingBuilder: (data) {
if (isMe) {
return Link(
child: Icon(Icons.settings, size: 20),
screenBuilder: (_) => SettingsScreen(),
material: false,
fullscreenDialog: true,
return ActionEntry(
iconData: Icons.settings,
onTap: () {
Provider.of<ThemeModel>(context).pushRoute(
context, (_) => SettingsScreen(),
fullscreenDialog: true);
},
);
} else {
return ActionButton(
Expand Down Expand Up @@ -223,8 +230,11 @@ class UserScreen extends StatelessWidget {
screenBuilder: (context) => UsersScreen.following(login),
),
]),
borderView,
borderView1,
borderView,
_buildContributions(contributions),
borderView,
borderView1,
TableView(
hasIcon: true,
Expand Down Expand Up @@ -270,6 +280,7 @@ class UserScreen extends StatelessWidget {
],
),
..._buildRepos(payload),
borderView1,
],
);
},
Expand Down
1 change: 1 addition & 0 deletions lib/utils/utils.dart
Expand Up @@ -8,6 +8,7 @@ import 'package:git_touch/screens/user.dart';
import 'package:intl/intl.dart';
import 'package:primer/primer.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
export 'package:flutter_vector_icons/flutter_vector_icons.dart';

final monospaceFont = Platform.isIOS ? 'Menlo' : 'monospace'; // FIXME:
Expand Down
25 changes: 25 additions & 0 deletions lib/widgets/action_entry.dart
@@ -0,0 +1,25 @@
import 'package:flutter/material.dart';
import 'package:git_touch/models/theme.dart';
import 'package:provider/provider.dart';

class ActionEntry extends StatelessWidget {
final IconData iconData;
final VoidCallback onTap;
ActionEntry({this.iconData, this.onTap});

@override
Widget build(BuildContext context) {
switch (Provider.of<ThemeModel>(context).theme) {
case AppThemeType.cupertino:
return GestureDetector(
child: Icon(iconData),
onTap: onTap,
);
default:
return IconButton(
icon: Icon(iconData),
onPressed: onTap,
);
}
}
}
5 changes: 1 addition & 4 deletions lib/widgets/link.dart
Expand Up @@ -10,24 +10,21 @@ class Link extends StatelessWidget {
final WidgetBuilder screenBuilder;
final Function onTap;
final bool material;
final bool fullscreenDialog;

Link({
this.child,
this.url,
this.screenBuilder,
this.onTap,
this.material = true,
this.fullscreenDialog = false,
}) : assert(screenBuilder == null || url == null);

void _onTap(BuildContext context) {
if (onTap != null) {
return onTap();
}
if (screenBuilder != null) {
return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder,
fullscreenDialog: fullscreenDialog);
return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder);
}
if (url != null) {
launch(url);
Expand Down

0 comments on commit eadef89

Please sign in to comment.