我正在尝试在 Flutter 中创建一个网络应用程序,理想情况下它可以像网站一样工作。用户将登录并能够查看包含私人信息的仪表板,但某些屏幕上包含公共信息,任何人都可以使用动态路由 URL 导航到这些信息,例如: ,myflutterapp.com/feed/usersPublicInfo该链接可以发布到另一个网站,例如用户可以直接进入该路线。
显然,使用命名路由是我需要的解决方案,但是是什么阻止某人直接访问包含私人信息的路由呢?或者至少防止用户进入包含null信息的页面并导致小部件崩溃?
解决思路1
使用命名路由,并在登录屏幕之后将用户变量传递到每个屏幕,并在生成路由之前进行空检查。如果为空,则意味着有人跳过了一些路线,并且他们被发送回登录
解决思路2
如果可能,请混合使用命名路由和“未命名”路由,例如提要、仪表板和登录屏幕。用户进入仪表板后,所有路由都将使用 Navigator.push() 进行处理,从而防止从 URL 访问它们
其他解决方案?
我对 flutter 和 flutter web 相当陌生,所以我可能会完全错误地解决这个问题。我希望得到一些建议。谢谢!
看起来在 Firebase Storage 的最新版本中,该方法.put(...)已被弃用,取而代之的是 .putData(Uint8List) 和 .putFile(...),我还没有找到适用于 Flutter Web 的解决方案。
我正在尝试的代码是这样的,但它没有返回任何内容或抛出任何错误。
_startFilePicker() async {
InputElement uploadInput = FileUploadInputElement();
uploadInput.click();
uploadInput.onChange.listen((e) {
// read file content as dataURL
final files = uploadInput.files;
if (files.length == 1) {
final file = files[0];
FileReader reader = FileReader();
reader.onLoadEnd.listen((e) async {
setState(() {
uploadedImage = reader.result;
});
await uploadImage();
});
reader.onError.listen((fileEvent) {});
reader.readAsArrayBuffer(file);
}
});
}
Future uploadImage() async {
StorageReference storageReference =
FirebaseStorage.instance.ref().child(userID + '/userPhoto');
try {
StorageUploadTask uploadTask = storageReference.putData(uploadedImage); …Run Code Online (Sandbox Code Playgroud)