mirror of
https://github.com/pd4d10/git-touch.git
synced 2026-04-29 11:03:05 -05:00
refactor: use provider
This commit is contained in:
@@ -2,7 +2,8 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:git_touch/screens/repo.dart';
|
import 'package:git_touch/screens/repo.dart';
|
||||||
import 'package:primer/primer.dart';
|
import 'package:primer/primer.dart';
|
||||||
import 'providers/notification.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:git_touch/models/notification.dart';
|
||||||
import 'providers/settings.dart';
|
import 'providers/settings.dart';
|
||||||
import 'screens/news.dart';
|
import 'screens/news.dart';
|
||||||
import 'screens/notifications.dart';
|
import 'screens/notifications.dart';
|
||||||
@@ -25,7 +26,7 @@ class _HomeState extends State<Home> {
|
|||||||
// String login;
|
// String login;
|
||||||
|
|
||||||
Widget _buildNotificationIcon(BuildContext context) {
|
Widget _buildNotificationIcon(BuildContext context) {
|
||||||
int count = NotificationProvider.of(context).count;
|
int count = Provider.of<NotificationModel>(context).count;
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
return Icon(Icons.notifications_none);
|
return Icon(Icons.notifications_none);
|
||||||
}
|
}
|
||||||
@@ -158,19 +159,12 @@ class _HomeState extends State<Home> {
|
|||||||
|
|
||||||
class App extends StatelessWidget {
|
class App extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
build(context) {
|
Widget build(BuildContext context) {
|
||||||
return NotificationProvider(
|
return MultiProvider(
|
||||||
child: SettingsProvider(
|
providers: [
|
||||||
child: DefaultTextStyle(
|
ChangeNotifierProvider(builder: (context) => NotificationModel()),
|
||||||
style: TextStyle(color: Colors.black),
|
],
|
||||||
child: Home(),
|
child: SettingsProvider(child: Home()),
|
||||||
// theme: ThemeData(
|
|
||||||
// textTheme: TextTheme(
|
|
||||||
// title: TextStyle(color: Colors.red),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
11
lib/models/notification.dart
Normal file
11
lib/models/notification.dart
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class NotificationModel with ChangeNotifier {
|
||||||
|
int _count = 0;
|
||||||
|
int get count => _count;
|
||||||
|
|
||||||
|
setCount(int v) {
|
||||||
|
_count = v;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
class NotificationProvider extends StatefulWidget {
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
NotificationProvider({@required this.child});
|
|
||||||
|
|
||||||
static _NotificationProviderState of(BuildContext context) {
|
|
||||||
return (context.inheritFromWidgetOfExactType(_InheritedNotificationProvider)
|
|
||||||
as _InheritedNotificationProvider)
|
|
||||||
.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
_NotificationProviderState createState() => new _NotificationProviderState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _NotificationProviderState extends State<NotificationProvider> {
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCount(int value) {
|
|
||||||
setState(() {
|
|
||||||
count = value;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return new _InheritedNotificationProvider(
|
|
||||||
data: this,
|
|
||||||
child: widget.child,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class _InheritedNotificationProvider extends InheritedWidget {
|
|
||||||
final _NotificationProviderState data;
|
|
||||||
|
|
||||||
_InheritedNotificationProvider({
|
|
||||||
Key key,
|
|
||||||
@required this.data,
|
|
||||||
@required Widget child,
|
|
||||||
}) : super(key: key, child: child);
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool updateShouldNotify(_InheritedNotificationProvider old) => true;
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import '../scaffolds/refresh_stateless.dart';
|
import '../scaffolds/refresh_stateless.dart';
|
||||||
import '../providers/notification.dart';
|
import 'package:git_touch/models/notification.dart';
|
||||||
import '../providers/settings.dart';
|
import '../providers/settings.dart';
|
||||||
import '../widgets/notification_item.dart';
|
import '../widgets/notification_item.dart';
|
||||||
import '../widgets/list_group.dart';
|
import '../widgets/list_group.dart';
|
||||||
@@ -54,7 +55,7 @@ class NotificationScreenState extends State<NotificationScreen> {
|
|||||||
var ns = items.map((item) => NotificationPayload.fromJson(item)).toList();
|
var ns = items.map((item) => NotificationPayload.fromJson(item)).toList();
|
||||||
|
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
NotificationProvider.of(context).setCount(ns.length);
|
Provider.of<NotificationModel>(context).setCount(ns.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, NotificationGroup> _groupMap = {};
|
Map<String, NotificationGroup> _groupMap = {};
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ dependencies:
|
|||||||
launch_review: ^2.0.0
|
launch_review: ^2.0.0
|
||||||
flutter_highlight: ^0.3.0
|
flutter_highlight: ^0.3.0
|
||||||
timeago: ^2.0.18
|
timeago: ^2.0.18
|
||||||
|
provider: ^3.1.0
|
||||||
primer:
|
primer:
|
||||||
git:
|
git:
|
||||||
url: git://github.com/pd4d10/primer-flutter
|
url: git://github.com/pd4d10/primer-flutter
|
||||||
|
|||||||
Reference in New Issue
Block a user