Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

[path_provider] Migrate examples to null-safety #3559

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'dart:async';

import 'dart:io';
Expand Down
38 changes: 19 additions & 19 deletions packages/path_provider/path_provider/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,21 @@ 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;

@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
Future<Directory> _tempDirectory;
Future<Directory> _appSupportDirectory;
Future<Directory> _appLibraryDirectory;
Future<Directory> _appDocumentsDirectory;
Future<Directory> _externalDocumentsDirectory;
Future<List<Directory>> _externalStorageDirectories;
Future<List<Directory>> _externalCacheDirectories;
Future<Directory?>? _tempDirectory;
Future<Directory?>? _appSupportDirectory;
Future<Directory?>? _appLibraryDirectory;
Future<Directory?>? _appDocumentsDirectory;
Future<Directory?>? _externalDocumentsDirectory;
Future<List<Directory>?>? _externalStorageDirectories;
Future<List<Directory>?>? _externalCacheDirectories;

void _requestTempDirectory() {
setState(() {
Expand All @@ -51,13 +51,13 @@ class _MyHomePageState extends State<MyHomePage> {
}

Widget _buildDirectory(
BuildContext context, AsyncSnapshot<Directory> snapshot) {
BuildContext context, AsyncSnapshot<Directory?> snapshot) {
Text text = const Text('');
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
text = Text('Error: ${snapshot.error}');
} else if (snapshot.hasData) {
text = Text('path: ${snapshot.data.path}');
text = Text('path: ${snapshot.data!.path}');
} else {
text = const Text('path unavailable');
}
Expand All @@ -66,14 +66,14 @@ class _MyHomePageState extends State<MyHomePage> {
}

Widget _buildDirectories(
BuildContext context, AsyncSnapshot<List<Directory>> snapshot) {
BuildContext context, AsyncSnapshot<List<Directory>?> snapshot) {
Text text = const Text('');
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
text = Text('Error: ${snapshot.error}');
} else if (snapshot.hasData) {
final String combined =
snapshot.data.map((Directory d) => d.path).join(', ');
snapshot.data!.map((Directory d) => d.path).join(', ');
text = Text('paths: $combined');
} else {
text = const Text('path unavailable');
Expand Down Expand Up @@ -134,7 +134,7 @@ class _MyHomePageState extends State<MyHomePage> {
onPressed: _requestTempDirectory,
),
),
FutureBuilder<Directory>(
FutureBuilder<Directory?>(
future: _tempDirectory, builder: _buildDirectory),
Padding(
padding: const EdgeInsets.all(16.0),
Expand All @@ -143,7 +143,7 @@ class _MyHomePageState extends State<MyHomePage> {
onPressed: _requestAppDocumentsDirectory,
),
),
FutureBuilder<Directory>(
FutureBuilder<Directory?>(
future: _appDocumentsDirectory, builder: _buildDirectory),
Padding(
padding: const EdgeInsets.all(16.0),
Expand All @@ -152,7 +152,7 @@ class _MyHomePageState extends State<MyHomePage> {
onPressed: _requestAppSupportDirectory,
),
),
FutureBuilder<Directory>(
FutureBuilder<Directory?>(
future: _appSupportDirectory, builder: _buildDirectory),
Padding(
padding: const EdgeInsets.all(16.0),
Expand All @@ -161,7 +161,7 @@ class _MyHomePageState extends State<MyHomePage> {
onPressed: _requestAppLibraryDirectory,
),
),
FutureBuilder<Directory>(
FutureBuilder<Directory?>(
future: _appLibraryDirectory, builder: _buildDirectory),
Padding(
padding: const EdgeInsets.all(16.0),
Expand All @@ -172,7 +172,7 @@ class _MyHomePageState extends State<MyHomePage> {
Platform.isIOS ? null : _requestExternalStorageDirectory,
),
),
FutureBuilder<Directory>(
FutureBuilder<Directory?>(
future: _externalDocumentsDirectory, builder: _buildDirectory),
Column(children: <Widget>[
Padding(
Expand All @@ -190,7 +190,7 @@ class _MyHomePageState extends State<MyHomePage> {
),
),
]),
FutureBuilder<List<Directory>>(
FutureBuilder<List<Directory>?>(
future: _externalStorageDirectories,
builder: _buildDirectories),
Column(children: <Widget>[
Expand All @@ -204,7 +204,7 @@ class _MyHomePageState extends State<MyHomePage> {
),
),
]),
FutureBuilder<List<Directory>>(
FutureBuilder<List<Directory>?>(
future: _externalCacheDirectories, builder: _buildDirectories),
],
),
Expand Down
2 changes: 1 addition & 1 deletion packages/path_provider/path_provider/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ flutter:
uses-material-design: true

environment:
sdk: ">=2.1.0 <3.0.0"
sdk: ">=2.12.0-0 <3.0.0"
flutter: ">=1.12.13+hotfix.5"
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:path_provider_linux/path_provider_linux.dart';
Expand Down
16 changes: 8 additions & 8 deletions packages/path_provider/path_provider_linux/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ class MyApp extends StatefulWidget {
}

class _MyAppState extends State<MyApp> {
String _tempDirectory = 'Unknown';
String _downloadsDirectory = 'Unknown';
String _appSupportDirectory = 'Unknown';
String _documentsDirectory = 'Unknown';
String? _tempDirectory = 'Unknown';
String? _downloadsDirectory = 'Unknown';
String? _appSupportDirectory = 'Unknown';
String? _documentsDirectory = 'Unknown';
final PathProviderLinux _provider = PathProviderLinux();

@override
Expand All @@ -29,10 +29,10 @@ class _MyAppState extends State<MyApp> {

// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initDirectories() async {
String tempDirectory;
String downloadsDirectory;
String appSupportDirectory;
String documentsDirectory;
String? tempDirectory;
String? downloadsDirectory;
String? appSupportDirectory;
String? documentsDirectory;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
tempDirectory = await _provider.getTemporaryPath();
Expand Down
44 changes: 2 additions & 42 deletions packages/path_provider/path_provider_linux/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,13 @@ description: Demonstrates how to use the path_provider_linux plugin.
publish_to: "none"

environment:
sdk: ">=2.1.0 <3.0.0"
sdk: ">=2.12.0-0 <3.0.0"
flutter: ">=1.10.0"

dependencies:
flutter:
sdk: flutter

path_provider_linux: any

# 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:
path_provider_linux:
# When depending on this package from a real application you should use:
# path_provider_linux: ^x.y.z
Expand All @@ -32,39 +26,5 @@ dev_dependencies:
integration_test:
path: ../../../integration_test

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

# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ void main() {
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data.startsWith('Temp Directory: /tmp'),
widget.data!.startsWith('Temp Directory: /tmp'),
),
findsOneWidget,
);
Expand All @@ -48,7 +48,7 @@ void main() {
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data.startsWith('Documents Directory: /'),
widget.data!.startsWith('Documents Directory: /'),
),
findsOneWidget,
);
Expand All @@ -66,7 +66,7 @@ void main() {
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data.startsWith('Downloads Directory: /'),
widget.data!.startsWith('Downloads Directory: /'),
),
findsOneWidget,
);
Expand All @@ -85,7 +85,7 @@ void main() {
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data.startsWith('Application Support Directory: /'),
widget.data!.startsWith('Application Support Directory: /'),
),
findsOneWidget,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,46 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path_provider_platform_interface/path_provider_platform_interface.dart';
import 'package:integration_test/integration_test.dart';

void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();

testWidgets('getTemporaryDirectory', (WidgetTester tester) async {
final Directory result = await getTemporaryDirectory();
final PathProviderPlatform provider = PathProviderPlatform.instance;
final String result = await provider.getTemporaryPath();
_verifySampleFile(result, 'temporaryDirectory');
});

testWidgets('getApplicationDocumentsDirectory', (WidgetTester tester) async {
final Directory result = await getApplicationDocumentsDirectory();
final PathProviderPlatform provider = PathProviderPlatform.instance;
final String result = await provider.getApplicationDocumentsPath();
_verifySampleFile(result, 'applicationDocuments');
});

testWidgets('getApplicationSupportDirectory', (WidgetTester tester) async {
final Directory result = await getApplicationSupportDirectory();
final PathProviderPlatform provider = PathProviderPlatform.instance;
final String result = await provider.getApplicationSupportPath();
_verifySampleFile(result, 'applicationSupport');
});

testWidgets('getLibraryDirectory', (WidgetTester tester) async {
if (!Platform.isMacOS) {
return;
}
final Directory result = await getLibraryDirectory();
_verifySampleFile(result, 'library');
testWidgets('getDownloadsDirectory', (WidgetTester tester) async {
final PathProviderPlatform provider = PathProviderPlatform.instance;
final String result = await provider.getDownloadsPath();
_verifySampleFile(result, 'downloads');
});
}

/// Verify a file called [name] in [directory] by recreating it with test
/// Verify a file called [name] in [directoryPath] by recreating it with test
/// contents when necessary.
void _verifySampleFile(Directory directory, String name) {
final File file = File('${directory.path}/$name');
void _verifySampleFile(String directoryPath, String name) {
final Directory directory = Directory(directoryPath);
final File file = File('${directory.path}${Platform.pathSeparator}$name');

if (file.existsSync()) {
file.deleteSync();
Expand Down
Loading