Browse Source

show badge icon count notification

master
daivph 5 years ago
parent
commit
c6bcdd9642
5 changed files with 86 additions and 4 deletions
  1. +28
    -0
      lib/presentation/screens/notification/update_count_noti_bloc.dart
  2. +3
    -0
      lib/presentation/screens/slide_menu/drawer_user_controller.dart
  3. +47
    -4
      lib/presentation/screens/slide_menu/home_drawer.dart
  4. +7
    -0
      pubspec.lock
  5. +1
    -0
      pubspec.yaml

+ 28
- 0
lib/presentation/screens/notification/update_count_noti_bloc.dart View File

import 'package:farm_tpf/custom_model/NotificationObjectDTO.dart';
import 'package:farm_tpf/data/repository/repository.dart';
import 'package:rxdart/rxdart.dart';

class UpdateCountNotiBloc {
final _repository = Repository();
final _notiFetcher = PublishSubject<dynamic>();

Stream<dynamic> get actions => _notiFetcher.stream;

void getNotifications(Function(NotificationObjectDTO) onSuccess,
Function(String) onError) async {
_repository.getNotifications().then((value) {
onSuccess(value);
_notiFetcher.sink.add(value);
}).catchError((onError) {
onError(onError);
_notiFetcher.addError(onError);
});
}

void dispose() async {
await _notiFetcher.drain();
_notiFetcher.close();
}
}

final updateCountNotiBloc = UpdateCountNotiBloc();

+ 3
- 0
lib/presentation/screens/slide_menu/drawer_user_controller.dart View File

import 'package:farm_tpf/data/repository/user_repository.dart'; import 'package:farm_tpf/data/repository/user_repository.dart';
import 'package:farm_tpf/presentation/screens/notification/update_count_noti_bloc.dart';
import 'package:farm_tpf/utils/const_color.dart'; import 'package:farm_tpf/utils/const_color.dart';
import 'package:farm_tpf/utils/pref.dart'; import 'package:farm_tpf/utils/pref.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
setState(() { setState(() {
scrolloffset = 1.0; scrolloffset = 1.0;
try { try {
//open Drawer
updateCountNotiBloc.getNotifications((data) {}, (err) {});
widget.drawerIsOpen(true); widget.drawerIsOpen(true);
} catch (_) {} } catch (_) {}
}); });

+ 47
- 4
lib/presentation/screens/slide_menu/home_drawer.dart View File

import 'package:badges/badges.dart';
import 'package:farm_tpf/authentication/authentication.dart'; import 'package:farm_tpf/authentication/authentication.dart';
import 'package:farm_tpf/custom_model/NotificationObjectDTO.dart';
import 'package:farm_tpf/data/repository/user_repository.dart'; import 'package:farm_tpf/data/repository/user_repository.dart';
import 'package:farm_tpf/presentation/screens/notification/sc_notification.dart'; import 'package:farm_tpf/presentation/screens/notification/sc_notification.dart';
import 'package:farm_tpf/presentation/screens/notification/update_count_noti_bloc.dart';
import 'package:farm_tpf/presentation/screens/profile/sc_update_profile.dart'; import 'package:farm_tpf/presentation/screens/profile/sc_update_profile.dart';
import 'package:farm_tpf/utils/const_color.dart'; import 'package:farm_tpf/utils/const_color.dart';
import 'package:farm_tpf/utils/pref.dart'; import 'package:farm_tpf/utils/pref.dart';
), ),
textAlign: TextAlign.left, textAlign: TextAlign.left,
), ),
leading: Icon(
Icons.notifications,
color: Colors.black,
),
leading: _iconWithBadgeNotiCount(),
onTap: () { onTap: () {
navigationtoScreen(currentDrawerIndex); navigationtoScreen(currentDrawerIndex);
Navigator.of(context).push( Navigator.of(context).push(
pref.saveString(DATA_CONST.PUSH_KEY, ""); pref.saveString(DATA_CONST.PUSH_KEY, "");
} }
} }

Widget _iconWithBadgeNotiCount() {
return StreamBuilder(
stream: updateCountNotiBloc.actions,
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasData) {
var noti = snapshot.data as NotificationObjectDTO;
var unreadNoti = noti.numberUnreadTotal.toString();
return Badge(
badgeContent: Text(
'' + unreadNoti,
softWrap: true,
style: TextStyle(color: Colors.white),
),
shape: BadgeShape.square,
badgeColor: Colors.red,
borderRadius: 20,
position: BadgePosition(top: -15, start: 10),
child: Icon(
Icons.notifications,
color: Colors.black,
),
);
} else {
return Badge(
badgeContent: Text(
'0',
softWrap: true,
style: TextStyle(color: Colors.white),
),
shape: BadgeShape.square,
badgeColor: Colors.red,
borderRadius: 20,
position: BadgePosition(top: -15, start: 10),
child: Icon(
Icons.notifications,
color: Colors.black,
),
);
}
},
);
}
} }


enum DrawerIndex { ScanBarcode, Home, ControlDevice } enum DrawerIndex { ScanBarcode, Home, ControlDevice }

+ 7
- 0
pubspec.lock View File

url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.4.2" version: "2.4.2"
badges:
dependency: "direct main"
description:
name: badges
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.3"
barcode_scan: barcode_scan:
dependency: "direct main" dependency: "direct main"
description: description:

+ 1
- 0
pubspec.yaml View File

http: ^0.12.2 http: ^0.12.2
http_parser: ^3.1.4 http_parser: ^3.1.4
rflutter_alert: ^1.1.0 rflutter_alert: ^1.1.0
badges: ^1.1.1


camera: ^0.5.8+5 camera: ^0.5.8+5
path_provider: ^1.6.14 path_provider: ^1.6.14

Loading…
Cancel
Save