forked from core/mobile_nebula
Upgrade to flutter 2 (#26)
This commit is contained in:
parent
10d6b6bb9a
commit
a5ca3f86af
|
@ -5,13 +5,7 @@
|
|||
- [`android-studio`](https://developer.android.com/studio)
|
||||
- [Enable NDK](https://developer.android.com/studio/projects/install-ndk) Check local.properties for current NDK version
|
||||
|
||||
Downgrade flutter to a 1.x release (the following worked on an AUR install of `flutter`)
|
||||
|
||||
```
|
||||
cd $(dirname $(readlink $(which flutter)))
|
||||
git checkout 1.22.6
|
||||
flutter doctor
|
||||
```
|
||||
Currently using flutter 2.0.5
|
||||
|
||||
Copy env.sh.example to env.sh and update your PATH variable to expose both flutter and go bin directories
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ SPEC CHECKSUMS:
|
|||
DKPhotoGallery: e880aef16c108333240e1e7327896f2ea380f4f0
|
||||
file_picker: 3e6c3790de664ccf9b882732d9db5eaf6b8d4eb1
|
||||
FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
|
||||
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
||||
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
|
||||
MMWormhole: 0cd3fd35a9118b2e2d762b499f54eeaace0be791
|
||||
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
|
||||
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
|
||||
|
@ -109,4 +109,4 @@ SPEC CHECKSUMS:
|
|||
|
||||
PODFILE CHECKSUM: e8d4fb1ed5b0713de2623a28dfae2585e15c0d00
|
||||
|
||||
COCOAPODS: 1.10.0
|
||||
COCOAPODS: 1.10.1
|
||||
|
|
|
@ -343,7 +343,6 @@
|
|||
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework",
|
||||
"${PODS_ROOT}/../Flutter/Flutter.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/MMWormhole/MMWormhole.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
|
||||
|
@ -360,7 +359,6 @@
|
|||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MMWormhole.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Runner.xcodeproj">
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
|
|
|
@ -87,7 +87,7 @@ class _CIDRFieldState extends State<CIDRField> {
|
|||
widget.onChanged(cidr);
|
||||
},
|
||||
maxLength: 2,
|
||||
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
textInputAction: widget.textInputAction ?? TextInputAction.done,
|
||||
placeholder: 'bits',
|
||||
))
|
||||
|
|
|
@ -93,7 +93,7 @@ class _IPAndPortFieldState extends State<IPAndPortField> {
|
|||
widget.onChanged(_ipAndPort);
|
||||
},
|
||||
maxLength: 5,
|
||||
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
textInputAction: TextInputAction.done,
|
||||
placeholder: 'port',
|
||||
))
|
||||
|
|
|
@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||
import 'package:mobile_nebula/components/SpecialTextField.dart';
|
||||
import '../services/utils.dart';
|
||||
|
||||
|
@ -51,7 +50,7 @@ class IPField extends StatelessWidget {
|
|||
maxLengthEnforced: ipOnly ? true : false,
|
||||
inputFormatters: ipOnly
|
||||
? [IPTextInputFormatter()]
|
||||
: [WhitelistingTextInputFormatter(RegExp(r'[^\s]+'))],
|
||||
: [FilteringTextInputFormatter.allow(RegExp(r'[^\s]+'))],
|
||||
textInputAction: this.textInputAction,
|
||||
placeholder: help,
|
||||
));
|
||||
|
|
|
@ -96,7 +96,7 @@ class SimplePage extends StatelessWidget {
|
|||
title: Text(title),
|
||||
leading: leadingAction != null ? leadingAction : Utils.leadingBackWidget(context),
|
||||
trailingActions: trailingActions,
|
||||
ios: (_) => CupertinoNavigationBarData(
|
||||
cupertino: (_, __) => CupertinoNavigationBarData(
|
||||
transitionBetweenRoutes: false,
|
||||
),
|
||||
),
|
||||
|
|
|
@ -12,6 +12,7 @@ import 'package:flutter/widgets.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
|
||||
//TODO: please let us delete this file
|
||||
|
||||
/// An eyeballed value that moves the cursor slightly left of where it is
|
||||
/// rendered for text on Android so its positioning more accurately matches the
|
||||
|
|
|
@ -3,6 +3,8 @@ import 'package:flutter/services.dart';
|
|||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||
|
||||
//TODO: please let us delete this file
|
||||
|
||||
/// A normal TextField or CupertinoTextField that watches for copy, paste, cut, or select all keyboard actions
|
||||
class SpecialTextField extends StatefulWidget {
|
||||
const SpecialTextField(
|
||||
|
@ -74,7 +76,7 @@ class _SpecialTextFieldState extends State<SpecialTextField> {
|
|||
void initState() {
|
||||
formatters = widget.inputFormatters;
|
||||
if (formatters == null || formatters.length == 0) {
|
||||
formatters = [WhitelistingTextInputFormatter(RegExp(r'[^\t]'))];
|
||||
formatters = [FilteringTextInputFormatter.allow(RegExp(r'[^\t]'))];
|
||||
}
|
||||
|
||||
super.initState();
|
||||
|
@ -108,7 +110,7 @@ class _SpecialTextFieldState extends State<SpecialTextField> {
|
|||
},
|
||||
expands: widget.expands,
|
||||
inputFormatters: formatters,
|
||||
android: (_) => MaterialTextFieldData(
|
||||
material: (_, __) => MaterialTextFieldData(
|
||||
decoration: InputDecoration(
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
|
@ -116,7 +118,7 @@ class _SpecialTextFieldState extends State<SpecialTextField> {
|
|||
hintText: widget.placeholder,
|
||||
counterText: '',
|
||||
suffix: widget.suffix)),
|
||||
ios: (_) => CupertinoTextFieldData(
|
||||
cupertino: (_, __) => CupertinoTextFieldData(
|
||||
decoration: BoxDecoration(),
|
||||
padding: EdgeInsets.zero,
|
||||
placeholder: widget.placeholder,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||
import 'package:mobile_nebula/components/SpecialButton.dart';
|
||||
import 'package:mobile_nebula/services/utils.dart';
|
||||
|
||||
|
@ -21,21 +20,5 @@ class ConfigButtonItem extends StatelessWidget {
|
|||
constraints: BoxConstraints(minHeight: Utils.minInteractiveSize, minWidth: double.infinity),
|
||||
child: Center(child: content),
|
||||
));
|
||||
|
||||
return Container(
|
||||
color: Utils.configItemBackground(context),
|
||||
constraints: BoxConstraints(minHeight: Utils.minInteractiveSize, minWidth: double.infinity),
|
||||
child: PlatformButton(
|
||||
androidFlat: (_) => MaterialFlatButtonData(
|
||||
textTheme: ButtonTextTheme.normal, padding: EdgeInsets.zero, shape: RoundedRectangleBorder()),
|
||||
ios: (_) => CupertinoButtonData(padding: EdgeInsets.zero, borderRadius: BorderRadius.zero),
|
||||
padding: EdgeInsets.symmetric(vertical: 7),
|
||||
child: content,
|
||||
onPressed: () {
|
||||
if (onPressed != null) {
|
||||
onPressed();
|
||||
}
|
||||
},
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -85,12 +85,12 @@ class _AppState extends State<App> {
|
|||
DefaultCupertinoLocalizations.delegate,
|
||||
],
|
||||
title: 'Nebula',
|
||||
android: (_) {
|
||||
material: (_, __) {
|
||||
return new MaterialAppData(
|
||||
themeMode: brightness == Brightness.light ? ThemeMode.light : ThemeMode.dark,
|
||||
);
|
||||
},
|
||||
ios: (_) => CupertinoAppData(
|
||||
cupertino: (_, __) => CupertinoAppData(
|
||||
theme: CupertinoThemeData(brightness: brightness),
|
||||
),
|
||||
home: MainScreen(),
|
||||
|
|
|
@ -10,7 +10,7 @@ class StaticHost {
|
|||
lighthouse = json['lighthouse'];
|
||||
|
||||
var list = json['destinations'] as List<dynamic>;
|
||||
var result = List<IPAndPort>();
|
||||
var result = <IPAndPort>[];
|
||||
|
||||
list.forEach((item) {
|
||||
result.add(IPAndPort.fromString(item));
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
@ -40,7 +38,7 @@ class _AboutScreenState extends State<AboutScreen> {
|
|||
Widget build(BuildContext context) {
|
||||
if (!ready) {
|
||||
return Center(
|
||||
child: PlatformCircularProgressIndicator(ios: (_) {
|
||||
child: PlatformCircularProgressIndicator(cupertino: (_, __) {
|
||||
return CupertinoProgressIndicatorData(radius: 50);
|
||||
}),
|
||||
);
|
||||
|
|
|
@ -72,7 +72,7 @@ class _MainScreenState extends State<MainScreen> {
|
|||
Widget _buildBody() {
|
||||
if (!ready) {
|
||||
return Center(
|
||||
child: PlatformCircularProgressIndicator(ios: (_) {
|
||||
child: PlatformCircularProgressIndicator(cupertino: (_, __) {
|
||||
return CupertinoProgressIndicatorData(radius: 50);
|
||||
}),
|
||||
);
|
||||
|
|
|
@ -77,7 +77,7 @@ class _AdvancedScreenState extends State<AdvancedScreen> {
|
|||
suffix: Text("seconds"),
|
||||
textAlign: TextAlign.right,
|
||||
maxLength: 5,
|
||||
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
onSaved: (val) {
|
||||
setState(() {
|
||||
settings.lhDuration = int.parse(val);
|
||||
|
@ -93,7 +93,7 @@ class _AdvancedScreenState extends State<AdvancedScreen> {
|
|||
keyboardType: TextInputType.number,
|
||||
textAlign: TextAlign.right,
|
||||
maxLength: 5,
|
||||
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
onSaved: (val) {
|
||||
setState(() {
|
||||
settings.port = int.parse(val);
|
||||
|
@ -108,7 +108,7 @@ class _AdvancedScreenState extends State<AdvancedScreen> {
|
|||
keyboardType: TextInputType.number,
|
||||
textAlign: TextAlign.right,
|
||||
maxLength: 5,
|
||||
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
onSaved: (val) {
|
||||
setState(() {
|
||||
settings.mtu = int.parse(val);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:barcode_scan/barcode_scan.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
@ -189,16 +188,10 @@ class _CAListScreenState extends State<CAListScreen> {
|
|||
ConfigButtonItem(
|
||||
content: Text('Choose a file'),
|
||||
onPressed: () async {
|
||||
final file = await FilePicker.getFile();
|
||||
if (file == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var content = "";
|
||||
try {
|
||||
content = file.readAsStringSync();
|
||||
} catch (err) {
|
||||
return Utils.popError(context, 'Failed to load CA file', err.toString());
|
||||
final content = await Utils.pickFile(context);
|
||||
if (content == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
_addCAEntry(content, (err) {
|
||||
|
@ -208,6 +201,10 @@ class _CAListScreenState extends State<CAListScreen> {
|
|||
setState(() {});
|
||||
}
|
||||
});
|
||||
|
||||
} catch (err) {
|
||||
return Utils.popError(context, 'Failed to load CA file', err.toString());
|
||||
}
|
||||
})
|
||||
],
|
||||
)
|
||||
|
|
|
@ -219,26 +219,11 @@ class _CertificateScreenState extends State<CertificateScreen> {
|
|||
ConfigButtonItem(
|
||||
content: Center(child: Text('Choose a file')),
|
||||
onPressed: () async {
|
||||
var file;
|
||||
try {
|
||||
await FilePicker.clearTemporaryFiles();
|
||||
file = await FilePicker.getFile();
|
||||
|
||||
if (file == null) {
|
||||
print('GOT A NULL');
|
||||
final content = await Utils.pickFile(context);
|
||||
if (content == null) {
|
||||
return;
|
||||
}
|
||||
} catch (err) {
|
||||
print('HEY $err');
|
||||
}
|
||||
|
||||
var content = "";
|
||||
try {
|
||||
content = file.readAsStringSync();
|
||||
} catch (err) {
|
||||
print('CAUGH IN READ ${file}');
|
||||
return Utils.popError(context, 'Failed to load CA file', err.toString());
|
||||
}
|
||||
|
||||
_addCertEntry(content, (err) {
|
||||
if (err != null) {
|
||||
|
@ -247,6 +232,9 @@ class _CertificateScreenState extends State<CertificateScreen> {
|
|||
setState(() {});
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
return Utils.popError(context, 'Failed to load certificate file', err.toString());
|
||||
}
|
||||
})
|
||||
],
|
||||
)
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||
import 'package:mobile_nebula/components/FormPage.dart';
|
||||
import 'package:mobile_nebula/components/config/ConfigCheckboxItem.dart';
|
||||
import 'package:mobile_nebula/components/config/ConfigSection.dart';
|
||||
import 'package:mobile_nebula/services/utils.dart';
|
||||
|
||||
class CipherScreen extends StatefulWidget {
|
||||
const CipherScreen({Key key, this.cipher, @required this.onSave}) : super(key: key);
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||
import 'package:mobile_nebula/components/FormPage.dart';
|
||||
import 'package:mobile_nebula/components/config/ConfigCheckboxItem.dart';
|
||||
import 'package:mobile_nebula/components/config/ConfigSection.dart';
|
||||
import 'package:mobile_nebula/services/utils.dart';
|
||||
|
||||
class LogVerbosityScreen extends StatefulWidget {
|
||||
const LogVerbosityScreen({Key key, this.verbosity, @required this.onSave}) : super(key: key);
|
||||
|
|
|
@ -20,7 +20,7 @@ class _Hostmap {
|
|||
bool lighthouse;
|
||||
|
||||
_Hostmap({this.focusNode, this.nebulaIp, destinations, this.lighthouse})
|
||||
: destinations = destinations ?? List<IPAndPort>();
|
||||
: destinations = destinations ?? <IPAndPort>[];
|
||||
}
|
||||
|
||||
class StaticHostsScreen extends StatefulWidget {
|
||||
|
|
|
@ -6,13 +6,11 @@ import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
|||
import 'package:mobile_nebula/components/CIDRFormField.dart';
|
||||
import 'package:mobile_nebula/components/FormPage.dart';
|
||||
import 'package:mobile_nebula/components/IPFormField.dart';
|
||||
import 'package:mobile_nebula/components/PlatformTextFormField.dart';
|
||||
import 'package:mobile_nebula/components/config/ConfigItem.dart';
|
||||
import 'package:mobile_nebula/components/config/ConfigSection.dart';
|
||||
import 'package:mobile_nebula/models/CIDR.dart';
|
||||
import 'package:mobile_nebula/models/UnsafeRoute.dart';
|
||||
import 'package:mobile_nebula/services/utils.dart';
|
||||
import 'package:mobile_nebula/validators/mtuValidator.dart';
|
||||
|
||||
class UnsafeRouteScreen extends StatefulWidget {
|
||||
const UnsafeRouteScreen({Key key, this.route, this.onDelete, @required this.onSave}) : super(key: key);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/painting.dart';
|
||||
|
@ -127,7 +128,7 @@ class Utils {
|
|||
builder: (context) {
|
||||
if (Platform.isAndroid) {
|
||||
return AlertDialog(title: Text(title), content: Text(error), actions: <Widget>[
|
||||
FlatButton(
|
||||
TextButton(
|
||||
child: Text('Ok'),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
|
@ -163,4 +164,15 @@ class Utils {
|
|||
final parts = ip.split('.');
|
||||
return int.parse(parts[3]) | int.parse(parts[2]) << 8 | int.parse(parts[1]) << 16 | int.parse(parts[0]) << 24;
|
||||
}
|
||||
|
||||
static Future<String> pickFile(BuildContext context) async {
|
||||
await FilePicker.platform.clearTemporaryFiles();
|
||||
final result = await FilePicker.platform.pickFiles(allowMultiple: false);
|
||||
if (result == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final file = File(result.files.first.path);
|
||||
return file.readAsString();
|
||||
}
|
||||
}
|
||||
|
|
141
pubspec.lock
141
pubspec.lock
|
@ -7,7 +7,7 @@ packages:
|
|||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.5.0-nullsafety.1"
|
||||
version: "2.5.0"
|
||||
barcode_scan:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -21,77 +21,77 @@ packages:
|
|||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.3"
|
||||
version: "1.1.0"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0-nullsafety.3"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: convert
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "1.15.0"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
version: "3.0.1"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: cupertino_icons
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
version: "1.0.2"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
version: "6.1.0"
|
||||
file_picker:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_picker
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "3.0.1"
|
||||
fixnum:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -110,14 +110,14 @@ packages:
|
|||
name: flutter_platform_widgets
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.60.2"
|
||||
version: "1.2.0"
|
||||
flutter_plugin_android_lifecycle:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_plugin_android_lifecycle
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.8"
|
||||
version: "2.0.1"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
|
@ -128,118 +128,111 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
intl:
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: intl
|
||||
name: js
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.16.1"
|
||||
version: "0.6.3"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.10-nullsafety.1"
|
||||
version: "0.12.10"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0"
|
||||
package_info:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: package_info
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.1"
|
||||
version: "2.0.0"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.1"
|
||||
version: "1.8.0"
|
||||
path_provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: path_provider
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.6.10"
|
||||
version: "2.0.1"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_linux
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+1"
|
||||
version: "2.0.0"
|
||||
path_provider_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.4+3"
|
||||
version: "2.0.0"
|
||||
path_provider_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
version: "2.0.1"
|
||||
path_provider_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_windows
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: platform
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
platform_detect:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: platform_detect
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
version: "3.0.0"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
version: "2.0.0"
|
||||
process:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: process
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.13"
|
||||
version: "4.2.1"
|
||||
protobuf:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: protobuf
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_semver
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.4"
|
||||
version: "1.1.3"
|
||||
pull_to_refresh:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: pull_to_refresh
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.6.0"
|
||||
version: "1.6.5"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
|
@ -251,105 +244,119 @@ packages:
|
|||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.2"
|
||||
version: "1.8.0"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0-nullsafety.1"
|
||||
version: "1.10.0"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.19-nullsafety.2"
|
||||
version: "0.2.19"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0"
|
||||
url_launcher:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: url_launcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.5.2"
|
||||
version: "6.0.3"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_linux
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+1"
|
||||
version: "2.0.0"
|
||||
url_launcher_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+7"
|
||||
version: "2.0.0"
|
||||
url_launcher_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.8"
|
||||
version: "2.0.2"
|
||||
url_launcher_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3+1"
|
||||
version: "2.0.0"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_windows
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
uuid:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: uuid
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.4"
|
||||
version: "3.0.4"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.3"
|
||||
version: "2.1.0"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.5"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xdg_directories
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
version: "0.2.0"
|
||||
sdks:
|
||||
dart: ">=2.10.0-110 <2.11.0"
|
||||
flutter: ">=1.17.5 <2.0.0"
|
||||
dart: ">=2.12.0 <3.0.0"
|
||||
flutter: ">=2.0.0"
|
||||
|
|
16
pubspec.yaml
16
pubspec.yaml
|
@ -22,15 +22,15 @@ dependencies:
|
|||
|
||||
# The following adds the Cupertino Icons font to your application.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
cupertino_icons: ^0.1.2
|
||||
flutter_platform_widgets: ^0.60.2
|
||||
path_provider: ^1.6.0
|
||||
file_picker: ^1.9.0
|
||||
cupertino_icons: ^1.0.2
|
||||
flutter_platform_widgets: ^1.2.0
|
||||
path_provider: ^2.0.1
|
||||
file_picker: ^3.0.1
|
||||
barcode_scan: ^3.0.1
|
||||
uuid: ^2.0.4
|
||||
package_info: '>=0.4.1 <2.0.0'
|
||||
url_launcher: ^5.5.2
|
||||
pull_to_refresh: ^1.6.0
|
||||
uuid: ^3.0.4
|
||||
package_info: ^2.0.0
|
||||
url_launcher: ^6.0.3
|
||||
pull_to_refresh: ^1.6.5
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
Loading…
Reference in New Issue