我是 Flutter 的新手,刚刚从阅读有关 Flutter 的教程中听说了 BLoC 概念。从本教程中,我第一次听说 BLoC。但是我在这篇文章中也看到了一个名为“Repository”的文件。基本上数据流是这样的:
Web API --> Api Provider --> Repository --> BLoC --> Widget
Run Code Online (Sandbox Code Playgroud)
我不明白的是,为什么需要 Repository 层,因为当我查看存储库文件时,它基本上只是返回 API Provider 的 Future 结果?我很好奇并尝试进一步搜索,我看到互联网上一些人的编码模式也有一个 Repository 层。
在原始文章中,API Provider 做了一切。它调用 get 请求,等待 Future 解析,将 JSON 数据转换为适当的模型,并返回用 Future 括起来的模型。
class ApiProvider {
Future<ItemModel> fetchMovieList() async {
final response = await client.get("http://api.themoviedb.org/3/movie/popular?api_key=$_apiKey");
if (response.statusCode == 200)
return ItemModel.fromJson(json.decode(response.body));
else
throw Exception('Failed to load post');
}
}
class Repository {
ApiProvider _api = ApiProvider();
Future<ItemModel> fetchMovieList() => _api.fetchMovieList(); // …Run Code Online (Sandbox Code Playgroud) 目前,我使用以下方法设置每个屏幕的背景颜色:
@override
Widget build(BuildContext context) => Scaffold(
backgroundColor: Colors.white,
body: ...
);
Run Code Online (Sandbox Code Playgroud)
每次创建新屏幕时,我总是忘记添加这个背景颜色设置器。这是一个小小的不便,但我真的很感激如果有一种方法可以为所有屏幕设置一次背景颜色,除非被backgroundColor特定的属性覆盖Scaffold。我尝试在MaterialApp的color属性上设置颜色,但看起来没有任何效果。
我没有太多使用Linux和安装/卸载东西的经验.我正在使用亚马逊AWS,使用Ubuntu映像启动EC2,并将新的EBS卷附加到EC2.从仪表板中,我可以看到卷已连接到:/dev/sda1.
现在,我从亚马逊的这个指南中看到,内核可能会改变路径.所以我的/dev/sda1设备最有可能安装在,也许是/dev/xvda1.
所以我使用终端登录.我ls /dev/确实xvda1在那里看到了.但我也看到了xvda.现在我想格式化设备.但我不知道未格式化的设备是否附加到xvda1或xvda.我无法列出/dev/xvda1和/dev/xvda(它说ls: cannot access /dev/xvda1/: Not a directory)的内容.我想我必须先格式化它.
我试着用格式化sudo mkfs.ext4 /dev/xvda1.它说:/dev/xvda1 is mounted; will not make a filesystem here!.
我试着用格式化sudo mkfs.ext4 /dev/xvda.它说:/dev/xvda is apparently in use by the system; will not make a filesystem here!
如何格式化音量?
编辑:
lsblk命令的结果:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda …Run Code Online (Sandbox Code Playgroud) 我只知道self.presentViewController(childVc, animated: true, completion: {})在子视图控制器完成动画显示在屏幕后调用完成块.我实际上想要运行一个代码块,在子视图控制器的动画完成动画被解除后显示.我怎么能这样做,最好避免使用委托来做那件事?
编辑:我从这样的呈现(子)视图控制器调用这个:self.presentingViewController.dismissViewControllerAnimated (true) {},但问题是子视图控制器可以从任意页面呈现,并且在子项被解除后,父(呈现)视图控制器必须做不同的的东西.如果我在孩子中实现回调,我不能对调用它的不同父母做不同的事情.
例如,如果我在新闻屏幕中将登录表单作为模式调用,则在登录表单解除后,我想在之后显示评论部分.但是如果从产品屏幕以模态方式显示登录表单,我希望之后在购物车中显示用户的购物车.如果没有代表就不可能做到这一点,我仍然对委托解决方案感兴趣.
我有一个简短的音频文件集合,我想在用户按下相应按钮时播放一个音频文件。我有以下脚本可以播放声音:
<script type="text/javascript">
var sound = new Audio();
function playSound(audioUrl) {
sound.src = audioUrl;
sound.play();
}
</script>
<button type="button" onclick="playSound('http://example.com/audioA.mp3')">Audio A</button>
<button type="button" onclick="playSound('http://example.com/audioB.mp3')">Audio B</button>
<button type="button" onclick="playSound('http://example.com/audioC.mp3')">Audio C</button>
...
Run Code Online (Sandbox Code Playgroud)
问题是,这些音频文件不大,但是在第一次按下按钮时仍需要短暂的延迟才能下载和播放,这有点烦人。如何命令浏览器在页面加载时缓存所有音频文件?当我搜索此内容时,我发现有关缓冲和流音频的内容可能不适合我的需求,因为我的音频长度不那么长。谢谢。
我给自己定android.useAndroidX = true和android.enableJetifier = true上gradle.properties。但是当我跑步时,react-native run-android我看到:
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 1902 file(s) to forward-jetify. Using 4 workers...
Run Code Online (Sandbox Code Playgroud)
但是当我将 dir 更改为 android dir 并运行时./gradlew assembleDebug,我没有看到这样的事情。因此,我的构建在所有android.support.*导入库的地方都会中断。
> Task :react-native-app-auth:compileDebugJavaWithJavac FAILED
.../node_modules/react-native-app-auth/android/src/main/java/com/rnappauth/
RNAppAuthModule.java:10: error: package android.support.annotation does not exist
import android.support.annotation.Nullable;
^
.../node_modules/react-native-app-auth/android/src/main/java/com/rnappauth/RNAppAuthModule.java:11: error: cannot find symbol
import android.support.customtabs.CustomTabsCallback;
^
symbol: class CustomTabsCallback
location: package android.support.customtabs
.../node_modules/react-native-app-auth/android/src/main/java/com/rnappauth/RNAppAuthModule.java:12: error: cannot find …Run Code Online (Sandbox Code Playgroud) 如果我有一个视频文件的URL,如何检测URL指向的资源是否有效并且在显示之前是否存在?我已经看到一些建议AJAX的答案,但我只知道AJAX发送和检索一些数据,而不是获取文件的状态是否存在.
例如,如果我有一个类似的URL http://www.example.com/video.mp4,我怎么能检查是否video.mp4存在并且可以检索还是不能检索?
我想测试我的curl命令是否真的返回“连接超时”状态。因此,我想尝试运行curl --connect-timeout 1连接到任何需要超过1秒响应才能让curl超时的网站。但是在尝试了很多网站之后,我仍然无法获得连接超时状态(因为他们响应太快了?)。您建议我如何实现这一目标?
我想要一个包含一个字符串和一个整数的数组。有什么区别:
struct People { var name: String!; var age: Int! };
var data = Array<People>();
data.append (People(name: "John Doe", age: 31));
Run Code Online (Sandbox Code Playgroud)
和:
typealias People = (name: String!, age: Int!);
var data = Array<People>();
data.append ((name: "John Doe", age: 31));
Run Code Online (Sandbox Code Playgroud)
除此之外的一切。我的意思是,在从 struct 切换到 typealias 时,访问数据、内存管理、指针问题或其他我应该警惕的东西有什么区别吗?我通常使用 struct,但后来我发现我有 typealias 作为替代。我只是想确定哪一种更适合我的日常使用。注意:我注意到 struct 很像 class,因为您可以在其中添加方法。但是对于这样的事情,我通常直接使用类。
有时当我试图将tableview滚动到一行时,我可能会意外地提供一个不存在的部分/行.然后应用程序将崩溃.
self.tableView.scrollToRow(at: IndexPath(row: targetRow, section: targetSection), at: UITableViewScrollPosition.bottom, animated: true);
Run Code Online (Sandbox Code Playgroud)
如何使这个滚动过程崩溃安全?我的意思是,如果我提供不存在的部分/行,我希望UITableView只是忽略它.或者如何在滚动之前检查UITableView中是否存在节/行?谢谢.
swift ×3
flutter ×2
ios ×2
javascript ×2
linux ×2
ajax ×1
amazon-ec2 ×1
android ×1
audio ×1
caching ×1
curl ×1
gradlew ×1
modal-dialog ×1
react-native ×1
scaffold ×1
struct ×1
type-alias ×1
uitableview ×1