我正在尝试将 null 安全功能迁移到我的 Flutter 项目中,因为这对我的项目未来有好处。由于我已经有通过 Kotlin 开发 Android 应用程序的经验,我已经习惯了这种空安全功能。但似乎我不能做一件在 Kotlin 中可以做的事情。
user?.name ?? "Unknown"
我注意到在 Dart 中,我可以使用此代码行设置默认值。 现在我正在尝试执行此操作
fun performOrReturn(users: Map<String, User>, id: String) {
val user = users[id] ?: return //This line
println("User info gotten : ${user.name}")
}
在 Kotlin 中,我可以执行此操作。如果特定变量为空,我可以让方法返回自身,因此 Kotlin 可以灵活地处理空安全。
所以这就是我想要做的,我的代码中有表格。我想检查该字段中指定的列和行中是否存在数据。
Map<int, List<MyData>> table = Map();
...
int _findDataExisting(int row, int col) {
List<MyData> data = table[row]; //This is causing problem because table[row] can be null
//Alternative solution is
//List<MyData> data = table[row] ?? List.empty();
//
//if(data.isEmpty) {
// return -1;
//}
//
for(int i = 0; i < data.length; i++) {
if(data[i].column == col) {
return i;
}
}
return -1;
}
我想让它返回 -1 而不是初始化默认值,因为它不利于处理内存,并且代码效率低下。
List<MyData> data = map[row] ?? return -1;
我像 Kotlin 一样尝试了下面的 line,但 Dart 似乎无法处理这个。
Dart 中是否有类似的东西?如果特定变量为空,则使其返回方法。
答案 0 :(得分:0)
不要太花哨。
int _findDataExisting(int row, int col) {
if (table[row] != null) {
List<MyData> data = table[row]!;
for(int i = 0; i < data.length; i++) {
if(data[i].column == col) {
return i;
}
}
}
return -1;
}
答案 1 :(得分:0)
您可以最初将 import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
private val networkCallback = getNetworkCallBack()
private fun getNetworkCallBack(): ConnectivityManager.NetworkCallback {
return object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
Toast.makeText(applicationContext, "Internet is on!", Toast.LENGTH_SHORT).show()
}
override fun onLost(network: Network) {
super.onLost(network)
Toast.makeText(applicationContext, "Internet turns off!", Toast.LENGTH_SHORT).show()
}
}
}
private fun getConnectivityManager() = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) // internet check works without this but need it for WiFi status
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build()
}
override fun onResume() {
super.onResume()
getConnectivityManager().registerNetworkCallback(getNetworkRequest(), networkCallback)
}
override fun onPause() {
super.onPause()
getConnectivityManager().unregisterNetworkCallback(networkCallback)
}
}
声明为 nullable 并让 null 检查自动提升它为不可为 null 的类型,从而避免需要使用 null 断言(data
) 之后:
!