diff --git a/lib/models/theme.dart b/lib/models/theme.dart index e0d1ed0..6c34bb5 100644 --- a/lib/models/theme.dart +++ b/lib/models/theme.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:fimber/fimber.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:git_touch/widgets/action_button.dart'; import 'package:shared_preferences/shared_preferences.dart'; class DialogOption { @@ -290,4 +291,34 @@ class ThemeModel with ChangeNotifier { } } } + + showActions(BuildContext context, List actionItems) async { + final value = await showCupertinoModalPopup( + context: context, + builder: (BuildContext context) { + return CupertinoActionSheet( + title: Text('Actions'), + actions: actionItems.asMap().entries.map((entry) { + return CupertinoActionSheetAction( + child: Text(entry.value.text), + onPressed: () { + Navigator.pop(context, entry.key); + }, + ); + }).toList(), + cancelButton: CupertinoActionSheetAction( + child: const Text('Cancel'), + isDefaultAction: true, + onPressed: () { + Navigator.pop(context); + }, + ), + ); + }, + ); + + if (value != null) { + actionItems[value].onPress(context); + } + } } diff --git a/lib/widgets/event_item.dart b/lib/widgets/event_item.dart index 8dd029b..3aee9e0 100644 --- a/lib/widgets/event_item.dart +++ b/lib/widgets/event_item.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/screens/repository.dart'; import 'package:git_touch/widgets/action_button.dart'; +import 'package:provider/provider.dart'; import 'package:timeago/timeago.dart' as timeago; import 'package:primer/primer.dart'; import '../screens/issue.dart'; @@ -79,33 +81,8 @@ class EventItem extends StatelessWidget { onLongPress: () async { if (actionItems == null) return; - final value = await showCupertinoModalPopup( - context: context, - builder: (BuildContext context) { - return CupertinoActionSheet( - title: Text('Actions'), - actions: actionItems.asMap().entries.map((entry) { - return CupertinoActionSheetAction( - child: Text(entry.value.text), - onPressed: () { - Navigator.pop(context, entry.key); - }, - ); - }).toList(), - cancelButton: CupertinoActionSheetAction( - child: const Text('Cancel'), - isDefaultAction: true, - onPressed: () { - Navigator.pop(context); - }, - ), - ); - }, - ); - - if (value != null) { - actionItems[value].onPress(context); - } + await Provider.of(context) + .showActions(context, actionItems); }, child: Container( padding: CommonStyle.padding, diff --git a/lib/widgets/repository_item.dart b/lib/widgets/repository_item.dart index a90343a..79a19df 100644 --- a/lib/widgets/repository_item.dart +++ b/lib/widgets/repository_item.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:git_touch/models/theme.dart'; import 'package:git_touch/screens/repository.dart'; -import 'package:git_touch/screens/user.dart'; +import 'package:git_touch/widgets/action_button.dart'; import 'package:git_touch/widgets/avatar.dart'; import 'package:primer/primer.dart'; +import 'package:provider/provider.dart'; import '../utils/utils.dart'; import 'link.dart'; @@ -163,6 +165,12 @@ class RepositoryItem extends StatelessWidget { // TODO: text style return Link( screenBuilder: inRepoScreen ? null : screenBuilder, + onLongPress: () async { + await Provider.of(context).showActions(context, [ + ActionItem.user(owner), + ActionItem.repository(owner, name), + ]); + }, child: Container( padding: CommonStyle.padding, child: Row(