Skip to content

Commit

Permalink
Null safety migration (#48)
Browse files Browse the repository at this point in the history
Co-authored-by: German Saprykin <german.saprykin@it-nomads.com>
  • Loading branch information
FZambia and mogol authored Jul 4, 2021
1 parent 555d30f commit 3c26b04
Show file tree
Hide file tree
Showing 20 changed files with 204 additions and 171 deletions.
1 change: 1 addition & 0 deletions example/chat_app/ios/Flutter/Debug.xcconfig
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
1 change: 1 addition & 0 deletions example/chat_app/ios/Flutter/Release.xcconfig
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
2 changes: 1 addition & 1 deletion example/chat_app/lib/chat.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import 'state.dart' as state;

class _ChatPageState extends State<ChatPage> {
final _msgs = <ChatMessage>[];
StreamSubscription<ChatMessage> _sub;
late StreamSubscription<ChatMessage> _sub;

@override
void initState() {
Expand Down
23 changes: 13 additions & 10 deletions example/chat_app/lib/client/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,21 @@ import 'dart:convert';

import 'package:centrifuge/centrifuge.dart';
import 'package:dash_chat/dash_chat.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';

import '../conf.dart' as conf;
import '../state.dart' as state;

class ChatClient {
Client _client;
late Client _client;

StreamSubscription<ConnectEvent> _connSub;
StreamSubscription<DisconnectEvent> _disconnSub;
StreamSubscription<MessageEvent> _msgSub;
StreamSubscription<ConnectEvent>? _connSub;
StreamSubscription<DisconnectEvent>? _disconnSub;

Subscription subscription;
late StreamSubscription<MessageEvent> _msgSub;

late Subscription? subscription;
final _chatMsgController = StreamController<ChatMessage>();

Stream<ChatMessage> get messages => _chatMsgController.stream;
Expand Down Expand Up @@ -56,7 +57,7 @@ class ChatClient {

void subscribe(String channel) {
print("Subscribing to channel $channel");
subscription = _client.getSubscription(channel);
final subscription = _client.getSubscription(channel);
subscription.publishStream
.map<String>((e) => utf8.decode(e.data))
.listen((data) {
Expand All @@ -78,11 +79,13 @@ class ChatClient {
subscription.subscribeErrorStream.listen(print);
subscription.unsubscribeStream.listen(print);
subscription.subscribe();

this.subscription = subscription;
}

void dispose() {
_connSub.cancel();
_disconnSub.cancel();
_connSub?.cancel();
_disconnSub?.cancel();
_msgSub.cancel();
_chatMsgController.close();
}
Expand All @@ -92,7 +95,7 @@ class ChatClient {
print("Sending msg : $output");
final data = utf8.encode(output);
try {
await subscription.publish(data);
await subscription?.publish(data);
} catch (e) {
rethrow;
}
Expand Down
2 changes: 1 addition & 1 deletion example/chat_app/lib/state.dart
Original file line number Diff line number Diff line change
@@ -1 +1 @@
String username;
String username = 'A User';
22 changes: 12 additions & 10 deletions example/chat_app/lib/widgets/login.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class _LoginFormState extends State<LoginForm> {
const Text("Choose a username", textScaleFactor: 1.8),
const Padding(padding: EdgeInsets.only(top: 35.0)),
Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
Icon(Icons.person),
const Icon(Icons.person),
const Padding(padding: EdgeInsets.only(right: 10.0)),
Container(
width: 250.0,
Expand All @@ -24,20 +24,22 @@ class _LoginFormState extends State<LoginForm> {
)),
]),
const Padding(padding: EdgeInsets.only(top: 35.0)),
OutlineButton(
child: const Text("Login"),
onPressed: () {
state.username = _controller.text;
widget.onLoggedIn();
},
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)))
ElevatedButton(
child: const Text("Login"),
onPressed: () {
state.username = _controller.text;
widget.onLoggedIn();
},
style: ButtonStyle(
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0)))),
)
]);
}
}

class LoginForm extends StatefulWidget {
const LoginForm({@required this.onLoggedIn});
const LoginForm({required this.onLoggedIn});

final VoidCallback onLoggedIn;

Expand Down
19 changes: 9 additions & 10 deletions example/chat_app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,22 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 0.1.0

environment:
sdk: ">=2.7.0 <3.0.0"
sdk: ">=2.12.0 <3.0.0"

dependencies:
centrifuge:
path: ../../
dash_chat: ^1.1.15-nullsafety
extra_pedantic: ^1.1.1+3
flutter:
sdk: flutter
fluttertoast: ^8.0.6
pedantic: ^1.8.0
extra_pedantic: ^1.1.1+3
responsive_builder: ^0.1.5
dash_chat: ^1.0.18
corsac_jwt: ^0.2.1
fluttertoast: ^4.0.0
centrifuge:
path: ../../

# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
dependency_overrides:
dash_chat:
git: git@github.com:fayeed/dash_chat.git

dev_dependencies:
flutter_test:
Expand Down
10 changes: 5 additions & 5 deletions example/flutter_app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class MyApp extends StatelessWidget {
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
MyHomePage({Key? key, required this.title}) : super(key: key);

final String title;

Expand All @@ -30,9 +30,9 @@ class MyHomePage extends StatefulWidget {
}

class _MyHomePageState extends State<MyHomePage> {
centrifuge.Client _centrifuge;
centrifuge.Subscription _subscription;
ScrollController _controller;
late centrifuge.Client _centrifuge;
late centrifuge.Subscription _subscription;
late ScrollController _controller;

final _items = <_ChatItem>[];

Expand Down Expand Up @@ -151,7 +151,7 @@ class _MyHomePageState extends State<MyHomePage> {
}

class _ChatItem {
_ChatItem({this.title, this.subtitle});
_ChatItem({required this.title, required this.subtitle});

final String title;
final String subtitle;
Expand Down
3 changes: 1 addition & 2 deletions example/flutter_app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: centrifuge_app
description: A new Flutter project.

environment:
sdk: '>=2.0.0 <3.0.0'
sdk: '>=2.12.0 <3.0.0'

dependencies:
flutter:
Expand All @@ -17,7 +17,6 @@ dev_dependencies:
flutter_test:
sdk: flutter


# For information on the generic Dart part of this file, see the
# following page: https://www.dartlang.org/tools/pub/pubspec

Expand Down
35 changes: 17 additions & 18 deletions lib/src/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import 'proto/client.pb.dart';
import 'subscription.dart';
import 'transport.dart';

Client createClient(String url, {ClientConfig config}) => ClientImpl(
Client createClient(String url, {ClientConfig? config}) => ClientImpl(
url,
config ?? ClientConfig(),
protobufTransportBuilder,
Expand Down Expand Up @@ -79,15 +79,15 @@ class ClientImpl implements Client, GeneratedMessageSender {
final TransportBuilder _transportBuilder;
final _subscriptions = <String, SubscriptionImpl>{};

Transport _transport;
String _token;
late Transport _transport;
String? _token;

final String _url;
ClientConfig _config;

ClientConfig get config => _config;
List<int> _connectData;
String _clientID;
ClientConfig? get config => _config;
List<int>? _connectData;
String? _clientID;

final _connectController = StreamController<ConnectEvent>.broadcast();
final _disconnectController = StreamController<DisconnectEvent>.broadcast();
Expand Down Expand Up @@ -152,7 +152,7 @@ class ClientImpl implements Client, GeneratedMessageSender {
@override
Subscription getSubscription(String channel) {
if (hasSubscription(channel)) {
return _subscriptions[channel];
return _subscriptions[channel]!;
}

final subscription = SubscriptionImpl(channel, this);
Expand All @@ -164,11 +164,9 @@ class ClientImpl implements Client, GeneratedMessageSender {

@override
Future<void> removeSubscription(Subscription subscription) async {
if (subscription != null) {
final String channel = subscription.channel;
subscription.unsubscribe();
_subscriptions.remove(channel);
}
final String channel = subscription.channel;
subscription.unsubscribe();
_subscriptions.remove(channel);
}

Future<UnsubscribeEvent> unsubscribe(String channel) async {
Expand All @@ -185,7 +183,8 @@ class ClientImpl implements Client, GeneratedMessageSender {

int _retryCount = 0;

void _processDisconnect({@required String reason, bool reconnect}) async {
void _processDisconnect(
{required String reason, required bool reconnect}) async {
if (_state == _ClientState.disconnected) {
return;
}
Expand Down Expand Up @@ -227,11 +226,11 @@ class ClientImpl implements Client, GeneratedMessageSender {

final request = ConnectRequest();
if (_token != null) {
request.token = _token;
request.token = _token!;
}

if (_connectData != null) {
request.data = _connectData;
request.data = _connectData!;
}

final result = await _transport.sendMessage(
Expand Down Expand Up @@ -294,9 +293,9 @@ class ClientImpl implements Client, GeneratedMessageSender {
}
}

Future<String> getToken(String channel) async {
if (_isPrivateChannel(channel)) {
final event = PrivateSubEvent(_clientID, channel);
Future<String?> getToken(String channel) async {
if (_clientID != null && _isPrivateChannel(channel)) {
final event = PrivateSubEvent(_clientID!, channel);
return _onPrivateSub(event);
}
return null;
Expand Down
6 changes: 3 additions & 3 deletions lib/src/client_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class ClientConfig {
this.privateChannelPrefix = "\$",
this.pingInterval = const Duration(seconds: 25),
this.onPrivateSub = _defaultPrivateSubCallback,
WaitRetry retry})
WaitRetry? retry})
: retry = retry ?? _defaultRetry(maxReconnectDelay.inSeconds);

final Duration timeout;
Expand All @@ -27,10 +27,10 @@ class ClientConfig {
final String privateChannelPrefix;
final Duration pingInterval;
final PrivateSubCallback onPrivateSub;
final Future Function(int) retry;
final Future? Function(int) retry;
}

typedef WaitRetry = Future Function(int);
typedef WaitRetry = Future? Function(int);

typedef PrivateSubCallback = Future<String> Function(PrivateSubEvent);

Expand Down
2 changes: 1 addition & 1 deletion lib/src/error.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ class Error {
final String message;

/// Custom error code.
Error.custom(this.code, [this.message]);
Error.custom(this.code, this.message);

@override
String toString() {
Expand Down
4 changes: 1 addition & 3 deletions lib/src/subscription.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import 'dart:async';

import 'package:meta/meta.dart';

import 'client.dart';
import 'error.dart' as errors;
import 'events.dart';
Expand Down Expand Up @@ -137,7 +135,7 @@ class SubscriptionImpl implements Subscription {
void addUnsubscribe(UnsubscribeEvent event) =>
_unsubscribeController.add(event);

Future _resubscribe({@required bool isResubscribed}) async {
Future _resubscribe({required bool isResubscribed}) async {
try {
final token = await _client.getToken(channel);
final request = SubscribeRequest()
Expand Down
Loading

0 comments on commit 3c26b04

Please sign in to comment.