我刚刚升级到 Xcode 13.3-beta,运行 flutter 项目出现此错误:
\nError output from Xcode build:\n\xe2\x86\xb3\n 2022-03-02 17:45:38.148 xcodebuild[62848:6695836] Requested but did not find extension point with identifier\n Xcode.IDEKit.ExtensionSentinelHostApplications for extension Xcode.DebuggerFoundation.AppExtensionHosts.watchOS of plug-in\n com.apple.dt.IDEWatchSupportCore\n 2022-03-02 17:45:38.148 xcodebuild[62848:6695836] Requested but did not find extension point with identifier\n Xcode.IDEKit.ExtensionPointIdentifierToBundleIdentifier for extension Xcode.DebuggerFoundation.AppExtensionToBundleIdentifierMap.watchOS of\n plug-in com.apple.dt.IDEWatchSupportCore\n ** BUILD FAILED **\nRun Code Online (Sandbox Code Playgroud)\n现在,我很困惑,我正在模拟器上运行 iOS 应用程序,为什么会出现像 watchOS 这样的错误?
\n我完全不知道如何解决这个错误。
\n有人可以帮助我吗?
\n我已经编写了一个基于 websocket 的应用程序,但是当我回到家(iOS 和 Android)时,websocket 不再工作了。如何让 websocket 仍然在后台工作?使服务可以一直运行。这是我的流和订阅:
channel = new IOWebSocketChannel.connect(wsUrl);
globalChannel = channel;
print("web socket channel connected.");
// add channel.stream to streamController
setState(() {
_streamController = StreamController.broadcast();
_streamController.addStream(channel.stream);
globalStreamController = _streamController;
});
// Here we listen to ws stream and add to global messages
// when enter chat page, globalSubscription should be stop
// if globalSub were canceled, how to reopen it??
globalSubscription = globalStreamController.stream.listen((data) {
}
Run Code Online (Sandbox Code Playgroud)
如何让这个流控制器仍然运行而不是在当前页面类中受到限制?
众所周知,flutter 有一个使用 websocket 的例子,但它只是以流的形式接收 websocket 响应,就像这样:
new StreamBuilder(
stream: widget.channel.stream,
builder: (context, snapshot) {
return new Text(snapshot.hasData ? '${snapshot.data}' : '');
},
);
Run Code Online (Sandbox Code Playgroud)
我想要的是一个异步函数,它接收每个 websocket 响应并将结果附加到列表中,以便可以更新列表视图。
无论如何如何以文本或json的形式获取websocket响应?
更新:我知道现在有一些像 stream.listen 这样的方法:
widget.channel.stream.listen((data) {
print("!!!!new msg: $data");
var dataJson = json.decode(data);
print(dataJson["content"]);
// do something after received data
setState(() {
_allAnimateMessages.insert(0, newMsg);
});
newMsg.animationController.forward();
});
Run Code Online (Sandbox Code Playgroud)
这可以在一个页面中工作,但是当再次进入该页面时,出现错误提示Bad state: Stream has already been listened to.。如何让流可以在每次开始时收听,然后广播到许多页面?
我有一个正在监听的 websocket 流:
widget.channel.stream.listen((data) {
print("!!!!new msg: $data");
var dataJson = json.decode(data);
print(dataJson["content"]);
// do my job
setState(() {
_allAnimateMessages.insert(0, newMsg);
});
newMsg.animationController.forward();
});
Run Code Online (Sandbox Code Playgroud)
但是,当再次进入该页面时,出现错误提示:
Bad state: Stream has already been listened to.
如何使它成为广播而其他页面可以接收该广播?
我想判断要从哪个页面开始(实际上是登录页面和主页)。因此,我必须在首选项中阅读isLogin。主要如何做?
我绑了这些代码:
Future<Null> checkIsLogin() async {
String _token = "";
// If token exist already, then HomePage
SharedPreferences prefs = await SharedPreferences.getInstance();
_token = prefs.getString("token");
print('get token from prefs: ' + _token);
if (_token != "" && _token != null) {
// already login
print("alreay login.");
isLogin = true;
}
}
void main() {
App.init();
// if we have token then go to HomePage directly otherwise go to LoginPage.
Widget _defaultHome = new LoginPage();
checkIsLogin();
if (isLogin) {
_defaultHome = …Run Code Online (Sandbox Code Playgroud) 在 Flutter 中,我想监听 websocket 断开连接事件,如何实现? 当应用程序进入后台时,websocket 连接将被删除,我仍然没有找到让它在后台继续运行的方法(有没有人有解决方案?),所以我必须检测 websocket 连接是否丢失或什么的,以便我失去连接时可以重新连接。如果有人知道如何实现这一点,请帮忙。
xcodebuild:错误:无法找到 SDK“/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk”。
git:错误:无法确定“/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk”的真实路径(errno=没有这样的文件或目录)
这就造成了死锁,git找不到这个路径,无法安装,然后它要求安装,我安装了,它找不到这个路径,也无法安装......
我应该怎么办?
我想实现一个ListTile,它的尾部是一个文本字段,这类似于iOS静态tableview,以便用户可以单击它并直接编辑文本。无论如何,如何在Flutter中执行此操作?
我的特征矩阵有一个二维矩阵,例如:
122 443 544 456 0.9
324 435 5465 645 0.8
32 434 545 546 0.778
435 546 6565 656 0.6878
546 6565 656 3453 54 0.7788
5456 546 545 6565 3434 0.244
435 5456 656 656 6565 0.445
.....
Run Code Online (Sandbox Code Playgroud)
当最后一列值大于 0.3 时,我想选择所有行(或获取其行索引)。
我知道我可以通过迭代所有行并判断最后一个元素来做到这一点,但我可能有 10000 行,要做到这一点,迭代会非常慢。
有没有更好的方法来做到这一点?