Bird
Raised Fist0
Fluttermobile~20 mins

Cloud Storage for files in Flutter - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Cloud Storage Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
Uploading a file to Firebase Storage
What will happen when this Flutter code runs and the user selects a file to upload?
Flutter
final storageRef = FirebaseStorage.instance.ref().child('uploads/myfile.txt');
final file = File('/path/to/file.txt');
await storageRef.putFile(file);
final url = await storageRef.getDownloadURL();
print(url);
AThe file is uploaded to the root folder, ignoring the 'uploads/' path.
BThe code throws a runtime error because 'putFile' requires a Uint8List, not a File.
CThe file is uploaded to Firebase Storage under 'uploads/myfile.txt' and the download URL is printed.
DThe file is uploaded but the download URL is null because 'getDownloadURL' is not awaited.
Attempts:
2 left
💡 Hint
Check how the storage reference path and file upload method are used.
❓ lifecycle
intermediate
2:00remaining
Handling upload progress in Flutter
Which code snippet correctly listens to upload progress events from Firebase Storage in Flutter?
Flutter
final storageRef = FirebaseStorage.instance.ref('uploads/photo.png');
final uploadTask = storageRef.putFile(file);
// Which code below correctly listens to progress?
A
uploadTask.onProgress.listen((progress) {
  print('Progress: $progress');
});
B
uploadTask.addListener(() {
  print('Upload progress');
});
C
uploadTask.events.listen((event) {
  print('Progress event');
});
D
uploadTask.snapshotEvents.listen((TaskSnapshot snapshot) {
  final progress = snapshot.bytesTransferred / snapshot.totalBytes;
  print('Progress: $progress');
});
Attempts:
2 left
💡 Hint
Look for the official property that streams upload snapshots.
🔧 Debug
advanced
2:00remaining
Fixing a permission denied error on upload
A Flutter app using Firebase Storage gets a 'permission denied' error when uploading files. Which Firebase Storage security rule causes this?
Flutter
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
      allow write: if false;
    }
  }
}
AThe rule allows writes only if the user is authenticated, but the app is unauthenticated.
BThe rule denies all write operations because 'allow write: if false;' blocks uploads.
CThe rule syntax is invalid and causes all operations to fail.
DThe rule allows writes only on files smaller than 1MB, but the file is larger.
Attempts:
2 left
💡 Hint
Check the condition after 'allow write'.
🧠 Conceptual
advanced
2:00remaining
Understanding Firebase Storage download URLs
What is true about the download URL returned by Firebase Storage's getDownloadURL() method?
AIt is a public URL that anyone can use to access the file without authentication.
BIt requires the user to be authenticated to access the file.
CIt only works inside the Firebase app and cannot be used in browsers.
DIt expires after 1 hour and must be refreshed.
Attempts:
2 left
💡 Hint
Think about how Firebase Storage URLs are designed for sharing.
❓ navigation
expert
3:00remaining
Managing file upload state across app navigation
In a Flutter app, a file upload starts on Screen A. The user navigates to Screen B before upload finishes. How to ensure upload progress updates still show on Screen B?
AUse a shared state management solution (like Provider or Riverpod) to hold the upload task and listen to its progress from both screens.
BStart a new upload task on Screen B to replace the one from Screen A.
CUse Navigator.popUntil to return to Screen A and show progress there only.
DUpload progress cannot be tracked after navigation; show a static message instead.
Attempts:
2 left
💡 Hint
Think about how to share data between screens in Flutter.

Practice

(1/5)
1. What is the main purpose of using FirebaseStorage.instance.ref() in Flutter apps?
easy
A. To initialize the Firebase app configuration.
B. To create a reference to a location in cloud storage where files can be uploaded or downloaded.
C. To display images stored in the app's local folder.
D. To authenticate users before accessing the app.

Solution

  1. Step 1: Understand FirebaseStorage.instance.ref()

    This method creates a reference to a specific location in Firebase Cloud Storage where files can be managed.
  2. Step 2: Identify its role in file handling

    It is used to point to folders or files for uploading or downloading, not for app initialization or user authentication.
  3. Final Answer:

    To create a reference to a location in cloud storage where files can be uploaded or downloaded. -> Option B
  4. Quick Check:

    ref() creates storage location reference [OK]
Hint: Remember ref() points to storage location, not app setup [OK]
Common Mistakes:
  • Confusing ref() with Firebase app initialization
  • Thinking ref() handles user authentication
  • Assuming ref() accesses local files
2. Which of the following is the correct syntax to upload a file named imageFile to Firebase Storage in Flutter?
easy
A. await FirebaseStorage.instance.ref('images/image.png').putFile(imageFile);
B. FirebaseStorage.putFile('images/image.png', imageFile);
C. await FirebaseStorage.uploadFile('images/image.png', imageFile);
D. FirebaseStorage.instance.upload('images/image.png', imageFile);

Solution

  1. Step 1: Check the correct method for uploading files

    The method to upload a file is putFile() called on a reference from FirebaseStorage.instance.ref().
  2. Step 2: Match the syntax

    await FirebaseStorage.instance.ref('images/image.png').putFile(imageFile); correctly uses await FirebaseStorage.instance.ref('path').putFile(file). Other options use incorrect method names or call patterns.
  3. Final Answer:

    await FirebaseStorage.instance.ref('images/image.png').putFile(imageFile); -> Option A
  4. Quick Check:

    Use ref().putFile() to upload [OK]
Hint: Upload files with ref(path).putFile(file) [OK]
Common Mistakes:
  • Using incorrect method names like uploadFile or upload
  • Calling putFile directly on FirebaseStorage without ref()
  • Omitting await for asynchronous upload
3. Consider the following Flutter code snippet:
final ref = FirebaseStorage.instance.ref('docs/report.pdf');
final url = await ref.getDownloadURL();
print(url);
What will be printed by this code?
medium
A. An error because getDownloadURL() requires a file upload first.
B. The local file path of 'report.pdf' on the device.
C. The binary content of the file 'report.pdf'.
D. A string URL that can be used to download the file 'report.pdf' from Firebase Storage.

Solution

  1. Step 1: Understand getDownloadURL()

    This method returns a URL string that points to the file stored in Firebase Storage at the given reference.
  2. Step 2: Analyze the code output

    The code prints the URL string, not local paths, errors, or file content.
  3. Final Answer:

    A string URL that can be used to download the file 'report.pdf' from Firebase Storage. -> Option D
  4. Quick Check:

    getDownloadURL() returns file URL [OK]
Hint: getDownloadURL() returns a downloadable URL string [OK]
Common Mistakes:
  • Thinking it returns local file path
  • Expecting file content instead of URL
  • Assuming error if file not uploaded (only if missing)
4. You wrote this code to upload a file but it throws an error:
final ref = FirebaseStorage.instance.ref('uploads/photo.jpg');
ref.putFile(photoFile);
What is the likely cause of the error?
medium
A. FirebaseStorage.instance is not initialized.
B. Using ref() instead of ref without parentheses.
C. Missing await keyword before putFile causing unhandled Future.
D. photoFile is not a valid File object.

Solution

  1. Step 1: Check asynchronous call usage

    The method putFile() returns a Future and should be awaited or handled properly.
  2. Step 2: Identify missing await

    Not using await or .then() can cause errors or unhandled Futures in Flutter async code.
  3. Final Answer:

    Missing await keyword before putFile causing unhandled Future. -> Option C
  4. Quick Check:

    Always await async upload calls [OK]
Hint: Always await putFile() to handle async upload [OK]
Common Mistakes:
  • Forgetting await on putFile()
  • Confusing ref() usage
  • Passing wrong file type without checking
5. You want to upload multiple images from a list List<File> images to Firebase Storage under folder 'gallery/'. Which approach correctly uploads all files and collects their download URLs?
hard
A. Use a loop with await inside to upload each file and then call getDownloadURL() for each upload, storing URLs in a list.
B. Upload all files without awaiting, then call getDownloadURL() once after the loop for all files.
C. Call getDownloadURL() before uploading files to get URLs in advance.
D. Upload files using putFile() without references and get URLs from local file paths.

Solution

  1. Step 1: Upload files sequentially with await

    Uploading each file with await ensures each upload completes before moving on, preventing errors.
  2. Step 2: Get download URLs after each upload

    After each upload, call getDownloadURL() on the file's reference to get its URL and store it.
  3. Step 3: Collect URLs in a list

    Store each URL in a list to use later, ensuring all files are uploaded and URLs are valid.
  4. Final Answer:

    Use a loop with await inside to upload each file and then call getDownloadURL() for each upload, storing URLs in a list. -> Option A
  5. Quick Check:

    Upload with await, then getDownloadURL() per file [OK]
Hint: Upload files one by one with await, then get URLs [OK]
Common Mistakes:
  • Not awaiting uploads causing race conditions
  • Calling getDownloadURL() before upload
  • Assuming one getDownloadURL() call returns all URLs
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard