Dart: Give all functions explicit types

It makes the code easier to understand and this way the static type
checker will catch bugs for us.
This commit is contained in:
Vishesh Handa
2019-06-02 15:51:43 +02:00
parent bde0097068
commit c79249cbe1
12 changed files with 39 additions and 24 deletions

View File

@ -2,8 +2,10 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
typedef OAuthCallback = void Function(GitHostException);
abstract class GitHost { abstract class GitHost {
void init(Function oAuthCallback); void init(OAuthCallback oAuthCallback);
Future launchOAuthScreen(); Future launchOAuthScreen();
Future<UserInfo> getUserInfo(); Future<UserInfo> getUserInfo();

View File

@ -16,7 +16,7 @@ class GitHub implements GitHost {
var _accessCode = ""; var _accessCode = "";
@override @override
void init(Function callback) { void init(OAuthCallback callback) {
Future _handleMessages(MethodCall call) async { Future _handleMessages(MethodCall call) async {
if (call.method != "onURL") { if (call.method != "onURL") {
print("GitHub Unknown Call: " + call.method); print("GitHub Unknown Call: " + call.method);

View File

@ -18,7 +18,7 @@ class GitLab implements GitHost {
var _stateOAuth = ""; var _stateOAuth = "";
@override @override
void init(Function callback) { void init(OAuthCallback callback) {
Future _handleMessages(MethodCall call) async { Future _handleMessages(MethodCall call) async {
if (call.method != "onURL") { if (call.method != "onURL") {
print("GitLab Unknown Call: " + call.method); print("GitLab Unknown Call: " + call.method);

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:function_types/function_types.dart';
import 'package:journal/apis/git.dart'; import 'package:journal/apis/git.dart';
import 'package:journal/apis/githost_factory.dart'; import 'package:journal/apis/githost_factory.dart';
import 'package:journal/settings.dart'; import 'package:journal/settings.dart';
@ -9,7 +10,7 @@ import 'githostsetup_loading.dart';
class GitHostSetupAutoConfigure extends StatefulWidget { class GitHostSetupAutoConfigure extends StatefulWidget {
final GitHostType gitHostType; final GitHostType gitHostType;
final Function onDone; final Func1<String, void> onDone;
GitHostSetupAutoConfigure({ GitHostSetupAutoConfigure({
@required this.gitHostType, @required this.gitHostType,

View File

@ -1,8 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:function_types/function_types.dart';
import 'package:journal/analytics.dart'; import 'package:journal/analytics.dart';
class GitHostSetupButton extends StatelessWidget { class GitHostSetupButton extends StatelessWidget {
final Function onPressed; final Func0<void> onPressed;
final String text; final String text;
final String iconUrl; final String iconUrl;

View File

@ -1,11 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:function_types/function_types.dart';
import 'package:journal/apis/githost_factory.dart'; import 'package:journal/apis/githost_factory.dart';
import 'githostsetup_button.dart'; import 'githostsetup_button.dart';
class GitCloneUrlPage extends StatefulWidget { class GitCloneUrlPage extends StatefulWidget {
final Function doneFunction; final Func1<String, void> doneFunction;
final String initialValue; final String initialValue;
GitCloneUrlPage({ GitCloneUrlPage({
@ -96,8 +97,8 @@ class GitCloneUrlPageState extends State<GitCloneUrlPage> {
} }
class GitCloneUrlKnownProviderPage extends StatefulWidget { class GitCloneUrlKnownProviderPage extends StatefulWidget {
final Function doneFunction; final Func1<String, void> doneFunction;
final Function launchCreateUrlPage; final Func0<void> launchCreateUrlPage;
final GitHostType gitHostType; final GitHostType gitHostType;
final String initialValue; final String initialValue;

View File

@ -1,11 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:function_types/function_types.dart';
import 'githostsetup_button.dart'; import 'githostsetup_button.dart';
class GitHostSetupFolderPage extends StatelessWidget { class GitHostSetupFolderPage extends StatelessWidget {
final List<String> folders; final List<String> folders;
final Function rootFolderSelected; final Func0<void> rootFolderSelected;
final Function subFolderSelected; final Func1<String, void> subFolderSelected;
GitHostSetupFolderPage({ GitHostSetupFolderPage({
@required this.folders, @required this.folders,
@ -47,7 +48,7 @@ class GitHostSetupFolderPage extends StatelessWidget {
// FIXME: This needs to be made much much prettier! // FIXME: This needs to be made much much prettier!
class FolderListWidget extends StatelessWidget { class FolderListWidget extends StatelessWidget {
final List<String> folders; final List<String> folders;
final Function onSelected; final Func1<String, void> onSelected;
FolderListWidget({ FolderListWidget({
@required this.folders, @required this.folders,

View File

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:dots_indicator/dots_indicator.dart'; import 'package:dots_indicator/dots_indicator.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:function_types/function_types.dart';
import 'package:journal/analytics.dart'; import 'package:journal/analytics.dart';
import 'package:journal/apis/git.dart'; import 'package:journal/apis/git.dart';
import 'package:journal/apis/githost_factory.dart'; import 'package:journal/apis/githost_factory.dart';
@ -18,7 +19,7 @@ import 'githostsetup_folder.dart';
import 'githostsetup_sshkey.dart'; import 'githostsetup_sshkey.dart';
class GitHostSetupScreen extends StatefulWidget { class GitHostSetupScreen extends StatefulWidget {
final Function onCompletedFunction; final Func1<String, void> onCompletedFunction;
GitHostSetupScreen(this.onCompletedFunction); GitHostSetupScreen(this.onCompletedFunction);
@ -471,8 +472,8 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
} }
class GitHostChoicePage extends StatelessWidget { class GitHostChoicePage extends StatelessWidget {
final Function onKnownGitHost; final Func1<GitHostType, void> onKnownGitHost;
final Function onCustomGitHost; final Func0<void> onCustomGitHost;
GitHostChoicePage({ GitHostChoicePage({
@required this.onKnownGitHost, @required this.onKnownGitHost,
@ -525,7 +526,7 @@ enum GitHostSetupType {
} }
class GitHostAutoConfigureChoicePage extends StatelessWidget { class GitHostAutoConfigureChoicePage extends StatelessWidget {
final Function onDone; final Func1<GitHostSetupType, void> onDone;
GitHostAutoConfigureChoicePage({@required this.onDone}); GitHostAutoConfigureChoicePage({@required this.onDone});

View File

@ -1,16 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:function_types/function_types.dart';
import 'githostsetup_button.dart'; import 'githostsetup_button.dart';
import 'githostsetup_loading.dart'; import 'githostsetup_loading.dart';
typedef CopyKeyFunction = void Function(BuildContext context);
class GitHostSetupSshKeyKnownProvider extends StatelessWidget { class GitHostSetupSshKeyKnownProvider extends StatelessWidget {
final Function doneFunction; final Func0<void> doneFunction;
final CopyKeyFunction copyKeyFunction; final Func1<BuildContext, void> copyKeyFunction;
final String publicKey; final String publicKey;
final Function openDeployKeyPage; final Func0<void> openDeployKeyPage;
GitHostSetupSshKeyKnownProvider({ GitHostSetupSshKeyKnownProvider({
@required this.doneFunction, @required this.doneFunction,
@ -83,8 +82,8 @@ class GitHostSetupSshKeyKnownProvider extends StatelessWidget {
} }
class GitHostSetupSshKeyUnknownProvider extends StatelessWidget { class GitHostSetupSshKeyUnknownProvider extends StatelessWidget {
final Function doneFunction; final Func0<void> doneFunction;
final CopyKeyFunction copyKeyFunction; final Func1<BuildContext, void> copyKeyFunction;
final String publicKey; final String publicKey;
GitHostSetupSshKeyUnknownProvider({ GitHostSetupSshKeyUnknownProvider({

View File

@ -1,8 +1,9 @@
import 'package:dots_indicator/dots_indicator.dart'; import 'package:dots_indicator/dots_indicator.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:function_types/function_types.dart';
class OnBoardingScreen extends StatefulWidget { class OnBoardingScreen extends StatefulWidget {
final Function onCompletedFunction; final Func0<void> onCompletedFunction;
OnBoardingScreen(this.onCompletedFunction); OnBoardingScreen(this.onCompletedFunction);
@ -119,7 +120,7 @@ class OnBoardingScreenState extends State<OnBoardingScreen> {
} }
class OnBoardingBottomButton extends StatelessWidget { class OnBoardingBottomButton extends StatelessWidget {
final Function onPressed; final Func0<void> onPressed;
final String text; final String text;
OnBoardingBottomButton({ OnBoardingBottomButton({

View File

@ -170,6 +170,13 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
function_types:
dependency: "direct main"
description:
name: function_types
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2"
glob: glob:
dependency: transitive dependency: transitive
description: description:

View File

@ -22,6 +22,7 @@ dependencies:
device_info: ^0.4.0+1 device_info: ^0.4.0+1
flutter_markdown: ^0.2.0 flutter_markdown: ^0.2.0
flutter_email_sender: ^2.0.2 flutter_email_sender: ^2.0.2
function_types: ^0.0.2
dev_dependencies: dev_dependencies:
flutter_launcher_icons: "^0.7.0" flutter_launcher_icons: "^0.7.0"