fix: material actions style

This commit is contained in:
Rongjian Zhang
2019-09-29 00:25:14 +08:00
parent 9487cc1bc6
commit eadef899d5
7 changed files with 59 additions and 34 deletions

View File

@@ -198,11 +198,12 @@ class ThemeModel with ChangeNotifier {
showPicker(BuildContext context, PickerGroupItem<String> groupItem) async { showPicker(BuildContext context, PickerGroupItem<String> groupItem) async {
switch (theme) { switch (theme) {
case AppThemeType.cupertino: case AppThemeType.cupertino:
default:
await showCupertinoModalPopup<void>( await showCupertinoModalPopup<void>(
context: context, context: context,
builder: (context) { builder: (context) {
return Container( return Container(
height: 300, height: 216,
child: CupertinoPicker( child: CupertinoPicker(
backgroundColor: CupertinoColors.white, backgroundColor: CupertinoColors.white,
children: groupItem.items.map((v) => Text(v.text)).toList(), 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);
}
} }
} }
} }

View File

@@ -8,11 +8,11 @@ import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:git_touch/widgets/picker.dart'; import 'package:git_touch/widgets/picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class CodeSettingsScreen extends StatelessWidget { class CodeThemeScreen extends StatelessWidget {
final String code; final String code;
final String language; final String language;
CodeSettingsScreen(this.code, this.language); CodeThemeScreen(this.code, this.language);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@@ -1,9 +1,11 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter_highlight/theme_map.dart'; import 'package:flutter_highlight/theme_map.dart';
import 'package:git_touch/models/code.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/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/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/app_bar_title.dart';
import 'package:git_touch/widgets/link.dart'; import 'package:git_touch/widgets/link.dart';
import 'package:git_touch/widgets/markdown_view.dart'; import 'package:git_touch/widgets/markdown_view.dart';
@@ -172,12 +174,14 @@ class ObjectScreen extends StatelessWidget {
trailingBuilder: (payload) { trailingBuilder: (payload) {
switch (type) { switch (type) {
case 'blob': case 'blob':
return Link( return ActionEntry(
child: Icon(Octicons.settings, size: 20), iconData: Octicons.settings,
material: false, onTap: () {
screenBuilder: payload == null if (payload != null) {
? null Provider.of<ThemeModel>(context).pushRoute(context,
: (_) => CodeSettingsScreen(payload['text'], _language), (_) => CodeThemeScreen(payload['text'], _language));
}
},
); );
default: default:
return null; return null;

View File

@@ -1,7 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/cupertino.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/scaffolds/refresh_stateful.dart';
import 'package:git_touch/screens/repositories.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/app_bar_title.dart';
import 'package:git_touch/widgets/table_view.dart'; import 'package:git_touch/widgets/table_view.dart';
import 'package:git_touch/widgets/text_contains_organization.dart'; import 'package:git_touch/widgets/text_contains_organization.dart';
@@ -89,12 +91,14 @@ class UserScreen extends StatelessWidget {
return [ return [
borderView1, borderView1,
if (title != null) TableViewHeader(title), if (title != null) TableViewHeader(title),
borderView,
...join( ...join(
borderView, borderView,
items.map((item) { items.map((item) {
return RepositoryItem(item); return RepositoryItem(item);
}).toList(), }).toList(),
) ),
borderView,
]; ];
} }
@@ -127,6 +131,7 @@ class UserScreen extends StatelessWidget {
}); });
return Container( return Container(
color: Colors.white,
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
child: SingleChildScrollView( child: SingleChildScrollView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
@@ -147,11 +152,13 @@ class UserScreen extends StatelessWidget {
title: AppBarTitle('User'), title: AppBarTitle('User'),
trailingBuilder: (data) { trailingBuilder: (data) {
if (isMe) { if (isMe) {
return Link( return ActionEntry(
child: Icon(Icons.settings, size: 20), iconData: Icons.settings,
screenBuilder: (_) => SettingsScreen(), onTap: () {
material: false, Provider.of<ThemeModel>(context).pushRoute(
fullscreenDialog: true, context, (_) => SettingsScreen(),
fullscreenDialog: true);
},
); );
} else { } else {
return ActionButton( return ActionButton(
@@ -223,8 +230,11 @@ class UserScreen extends StatelessWidget {
screenBuilder: (context) => UsersScreen.following(login), screenBuilder: (context) => UsersScreen.following(login),
), ),
]), ]),
borderView,
borderView1, borderView1,
borderView,
_buildContributions(contributions), _buildContributions(contributions),
borderView,
borderView1, borderView1,
TableView( TableView(
hasIcon: true, hasIcon: true,
@@ -270,6 +280,7 @@ class UserScreen extends StatelessWidget {
], ],
), ),
..._buildRepos(payload), ..._buildRepos(payload),
borderView1,
], ],
); );
}, },

View File

@@ -8,6 +8,7 @@ import 'package:git_touch/screens/user.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:primer/primer.dart'; import 'package:primer/primer.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
export 'package:flutter_vector_icons/flutter_vector_icons.dart'; export 'package:flutter_vector_icons/flutter_vector_icons.dart';
final monospaceFont = Platform.isIOS ? 'Menlo' : 'monospace'; // FIXME: final monospaceFont = Platform.isIOS ? 'Menlo' : 'monospace'; // FIXME:

View File

@@ -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,
);
}
}
}

View File

@@ -10,7 +10,6 @@ class Link extends StatelessWidget {
final WidgetBuilder screenBuilder; final WidgetBuilder screenBuilder;
final Function onTap; final Function onTap;
final bool material; final bool material;
final bool fullscreenDialog;
Link({ Link({
this.child, this.child,
@@ -18,7 +17,6 @@ class Link extends StatelessWidget {
this.screenBuilder, this.screenBuilder,
this.onTap, this.onTap,
this.material = true, this.material = true,
this.fullscreenDialog = false,
}) : assert(screenBuilder == null || url == null); }) : assert(screenBuilder == null || url == null);
void _onTap(BuildContext context) { void _onTap(BuildContext context) {
@@ -26,8 +24,7 @@ class Link extends StatelessWidget {
return onTap(); return onTap();
} }
if (screenBuilder != null) { if (screenBuilder != null) {
return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder, return Provider.of<ThemeModel>(context).pushRoute(context, screenBuilder);
fullscreenDialog: fullscreenDialog);
} }
if (url != null) { if (url != null) {
launch(url); launch(url);