diff --git a/lib/models/theme.dart b/lib/models/theme.dart index 4d8cc7e..31ca9ae 100644 --- a/lib/models/theme.dart +++ b/lib/models/theme.dart @@ -198,11 +198,12 @@ class ThemeModel with ChangeNotifier { showPicker(BuildContext context, PickerGroupItem groupItem) async { switch (theme) { case AppThemeType.cupertino: + default: await showCupertinoModalPopup( context: context, builder: (context) { return Container( - height: 300, + height: 216, child: CupertinoPicker( backgroundColor: CupertinoColors.white, children: groupItem.items.map((v) => Text(v.text)).toList(), @@ -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); - } } } } diff --git a/lib/screens/code_settings.dart b/lib/screens/code_theme.dart similarity index 96% rename from lib/screens/code_settings.dart rename to lib/screens/code_theme.dart index 4f50d1f..98de1ca 100644 --- a/lib/screens/code_settings.dart +++ b/lib/screens/code_theme.dart @@ -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) { diff --git a/lib/screens/object.dart b/lib/screens/object.dart index a082d4c..24200af 100644 --- a/lib/screens/object.dart +++ b/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'; @@ -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(context).pushRoute(context, + (_) => CodeThemeScreen(payload['text'], _language)); + } + }, ); default: return null; diff --git a/lib/screens/user.dart b/lib/screens/user.dart index 457c082..3b182de 100644 --- a/lib/screens/user.dart +++ b/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'; @@ -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, ]; } @@ -127,6 +131,7 @@ class UserScreen extends StatelessWidget { }); return Container( + color: Colors.white, padding: EdgeInsets.all(10), child: SingleChildScrollView( scrollDirection: Axis.horizontal, @@ -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(context).pushRoute( + context, (_) => SettingsScreen(), + fullscreenDialog: true); + }, ); } else { return ActionButton( @@ -223,8 +230,11 @@ class UserScreen extends StatelessWidget { screenBuilder: (context) => UsersScreen.following(login), ), ]), + borderView, borderView1, + borderView, _buildContributions(contributions), + borderView, borderView1, TableView( hasIcon: true, @@ -270,6 +280,7 @@ class UserScreen extends StatelessWidget { ], ), ..._buildRepos(payload), + borderView1, ], ); }, diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index ffd75f3..b8577e5 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -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: diff --git a/lib/widgets/action_entry.dart b/lib/widgets/action_entry.dart new file mode 100644 index 0000000..4408220 --- /dev/null +++ b/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(context).theme) { + case AppThemeType.cupertino: + return GestureDetector( + child: Icon(iconData), + onTap: onTap, + ); + default: + return IconButton( + icon: Icon(iconData), + onPressed: onTap, + ); + } + } +} diff --git a/lib/widgets/link.dart b/lib/widgets/link.dart index 9f8616e..c4189d3 100644 --- a/lib/widgets/link.dart +++ b/lib/widgets/link.dart @@ -10,7 +10,6 @@ class Link extends StatelessWidget { final WidgetBuilder screenBuilder; final Function onTap; final bool material; - final bool fullscreenDialog; Link({ this.child, @@ -18,7 +17,6 @@ class Link extends StatelessWidget { this.screenBuilder, this.onTap, this.material = true, - this.fullscreenDialog = false, }) : assert(screenBuilder == null || url == null); void _onTap(BuildContext context) { @@ -26,8 +24,7 @@ class Link extends StatelessWidget { return onTap(); } if (screenBuilder != null) { - return Provider.of(context).pushRoute(context, screenBuilder, - fullscreenDialog: fullscreenDialog); + return Provider.of(context).pushRoute(context, screenBuilder); } if (url != null) { launch(url);