Upgrade to flutter 2 (#26)

This commit is contained in:
Nathan Brown 2021-04-23 12:33:28 -05:00 committed by GitHub
parent 10d6b6bb9a
commit a5ca3f86af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 141 additions and 168 deletions

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -2,6 +2,6 @@
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
location = "self:">
</FileRef>
</Workspace>

View File

@ -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',
))

View File

@ -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',
))

View File

@ -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,
));

View File

@ -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,
),
),

View File

@ -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

View File

@ -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,

View File

@ -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();
}
},
));
}
}

View File

@ -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(),

View File

@ -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));

View File

@ -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);
}),
);

View File

@ -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);
}),
);

View File

@ -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);

View File

@ -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());
}
})
],
)

View File

@ -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());
}
})
],
)

View File

@ -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);

View File

@ -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);

View File

@ -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 {

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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"

View File

@ -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: