小编Agu*_*ana的帖子

如何根据对象的属性重新排列 Kotlin 中 ArrayList 的顺序?

我有ChatMessage像下面的代码这样的类:

class ChatMessage(val uid: String, val text: String, val fromId: String, val toId: String, val timestamp: Long) {}
Run Code Online (Sandbox Code Playgroud)

它有timestamp作为它的财产

我有一个像这样的空列表,稍后我将用数据填充此 messageList:

val messageList = ArrayList<ChatMessage>()
Run Code Online (Sandbox Code Playgroud)

我想messageList根据时间戳重新排列它,因此最低的时间戳将位于该数组的索引 0 中。

在 Kotlin 中如何做到这一点?如果这是微不足道的,我很抱歉,我是编程和 Kotlin 的新手。

android kotlin

3
推荐指数
2
解决办法
5867
查看次数

如何使用 swift 以编程方式添加具有某些约束的图像视图?

我是 iOS 开发新手。如果使用故事板,我可以像这样在视图控制器中放置一个图像视图

在此输入图像描述

我需要以编程方式制作类似的东西。

所以我有来自名为 的库的自定义视图RevealingSplashView,但我需要将图像视图添加到该自定义 UI 视图。我只知道添加图像视图,也许是这样的

let imageName = "yourImage.png"
let image = UIImage(named: imageName)
let imageView = UIImageView(image: image!)
imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
revealingSplashView.addSubview(imageView)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将图像视图的约束设置为

A。与中心 x 对齐到超级视图

b. 与超级视图成比例的宽度 0.8

C。高度限制 = 25

d. 将底部对齐到安全区域 = 32

怎么做 ?

这是我在添加图像视图之前使用的代码

let screenSize = UIScreen.main.bounds
            let iconWidth = (screenSize.width) * 0.8
            let iconHeight = iconWidth * 1 // ratio 1:1
            revealingSplashView = RevealingSplashView(iconImage: UIImage(named: "Loading Page Asset")!,iconInitialSize: CGSize(width: iconWidth, …
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift

3
推荐指数
1
解决办法
9495
查看次数

我可以在我的视图模型中创建一个实时数据观察器吗?或者我应该始终观察片段/活动?

我是 MVVM 新手。因此,我的片段/活动向服务器发出了 2 个请求,第一个请求的结果将用作第二个请求的输入参数。

因此,首先在我的片段中,当单击按钮时,我会发出请求以检查用户是否被禁止,如果没有,则该用户可以创建帖子。

所以首先我检查用户是否被禁止或没有在我的片段中使用此代码

class CreateEventFragment : Fragment() {

    lateinit var model: CreateEventViewModel


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        model = ViewModelProvider(this).get(CreateEventViewModel::class.java)

        button.setOnClickListener {
            model.checkIfUserIsBanned()
        }

    }


}
Run Code Online (Sandbox Code Playgroud)

这是视图模型

class CreateEventViewModel(application: Application) : AndroidViewModel(application) {

    val mUserIsBanned :MutableLiveData<Boolean> = UserClient.mUserIsBanned

    fun checkIfUserIsBanned(userID: String) {
        UserRepository.checkIfUserIsBanned(id)
    }


}
Run Code Online (Sandbox Code Playgroud)

这是客户端(为了简单起见,我跳过了存储库)

object UserClient {

    val mUserIsBanned = MutableLiveData<Boolean>()

    fun checkIfUserIsBanned(userID: String) {

        // perform networking, after getting the value then

        if (user.isBanned) {
            mUserIsBanned.postValue(true) …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-livedata android-viewmodel android-architecture-components

3
推荐指数
1
解决办法
1万
查看次数

如果我在 firebase 身份验证中有很多多余的匿名用户,可以吗?

我想让新用户在决定使用 Gmail、Facebook 或电子邮件和密码登录之前可以看到我的应用程序中的一些内容。所以首先我需要让他们在使用此代码安装应用程序时匿名登录

auth.signInAnonymously()
Run Code Online (Sandbox Code Playgroud)

然后,在他们尝试之后,他们决定使用 Google 帐户登录,然后我将具有特定 UID(假设 UID 是 q1q2q3)的用户转换为使用此代码使用 Google 作为身份验证提供程序。

auth.currentUser!!.linkWithCredential(credential)
Run Code Online (Sandbox Code Playgroud)

然后假设他们卸载并重新安装该应用程序。因此他们将再次匿名登录,并且作为匿名用户将获得不同的 UID(假设新的 UID 是 aXXXX12345b ),即使他们再次使用 Google 登录,他们也会以 q1q2q3 身份登录

所以现在我有一个多余的匿名用户(aXXXX12345b)。像这样有多余的匿名身份验证用户可以吗?我的意思是,我担心我会遇到 firebase 身份验证的限制。我应该怎么办 ?对于这样的情况有更好的方法吗?我不知道这是否是一种常见做法

android anonymous kotlin firebase firebase-authentication

3
推荐指数
1
解决办法
1041
查看次数

如何解决您的函数被终止,因为它在我的 Firebase 模拟器中引发了未处理的错误?

我正在尝试使用 Firebase 模拟器运行下面的 Firestore 触发器代码,firebase emulators:start

如您所见,在 firestore 触发器内,我有一段代码用于删除存储在 Firebase Storage 中的图像

我的代码:

exports.onDelete = functions
.firestore.document(path)
.onDelete((snapshot, context) => {

    try {

        const deletedUser = new User(snapshot.data());
        const promise1 = db.doc(`devices/${deletedUser.uid}`).delete();

        // deleting the image in Storage
        const defaultBucket = storage.bucket();
        const profilePictureFile = defaultBucket.file(`profilePicture/${deletedUser.uid}`);
        const promise2 = profilePictureFile.delete();

        const promises: Promise<any>[] = [promise1, promise2];
        return Promise.all(promises);

    } catch (error) {
        console.log(error);
        return Promise.reject(error);
    }
    

});
Run Code Online (Sandbox Code Playgroud)

因为 Firebase 模拟器目前没有用于存储的模拟器,所以我预计会出现错误。

但我有这样的警告

在此输入图像描述

正如您在最底部看到的,有一条警告说

您的函数被终止,因为它引发了未处理的错误。

这是一个严重的错误吗?我的意思是,我想我已经在代码中提供了 try catch 块,但为什么它仍然被视为未处理的错误?怎么解决这个问题?

抱歉,我是 Node …

node.js google-cloud-storage firebase google-cloud-functions firebase-storage

3
推荐指数
1
解决办法
3304
查看次数

如何在 Flutter 中长按底部导航栏项目后禁用弹出窗口/吐司?

在此输入图像描述

如果我长按底部导航栏项目的某个项目,那么它将显示一个弹出窗口/吐司及其项目的标题(上图中的收件箱弹出窗口)。我想禁用该行为,该怎么做?

这是我当前的底部导航栏

BottomNavigationBar(
        onTap: _selectPage,
        elevation: 2,
        backgroundColor: const Color.fromRGBO(245, 245, 245, 1),
        unselectedItemColor: Colors.grey,
        selectedItemColor: Theme.of(context).primaryColor,
        currentIndex: _selectedPageIndex,
        showSelectedLabels: false,
        showUnselectedLabels: false,
        type: BottomNavigationBarType.fixed,
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.home_outlined),
            label: "Home",
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.search),
            label: "Search",
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.add_circle_outline),
            label: "create",
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.notifications_none),
            label: "Inbox",
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.person_outline),
            label: "Profile",
          ),
        ],
      ),
    
Run Code Online (Sandbox Code Playgroud)

flutter flutter-bottomnavigation

3
推荐指数
1
解决办法
1749
查看次数

如何让 Google 地图信息窗口在 Flutter 中加载地图后立即显示?

我可以使用下面的代码在我的 Flutter 应用程序上显示 Google 地图

        final marker = Marker(
          markerId: MarkerId("someID"),
          position: LatLng(0.0, 0.0),
          infoWindow: InfoWindow(title: "Venue Name"),
        );

         GoogleMap(
            onTap: (newCoordinate) => onMapTapped(newCoordinate, controller),
            mapType: MapType.normal,
            onMapCreated: onGoogleMapCreated,
            initialCameraPosition: CameraPosition(
              target: LatLng(0.0, 0,0),
              zoom: 15.0,
            ),
            markers: {marker},
          ),
Run Code Online (Sandbox Code Playgroud)

要显示信息窗口,我需要先点击红色标记。我想要的是......

每当地图加载到屏幕上时,该信息窗口就会立即打开,而无需我点击红色标记。这样我就可以显示“场地名称”。怎么做?

google-maps google-maps-markers flutter

3
推荐指数
1
解决办法
5153
查看次数

Riverpod FutureProvider 在添加 .family 修饰符后将继续触发

所以我未来有这样的提供者

final additionalCostsProvider = FutureProvider.autoDispose.family<List<ExtraCost>, List<String>>((ref, cartCodes) {
  final cartAPI = ref.watch(cartAPIProvider);
  return cartAPI.getAdditionalCosts(cartCodes: cartCodes);
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我将购物车代码 ( List<String>) 作为参数传递给我的FutureProvider

然后我像这样使用它

@override
  Widget build(context, ref) {
    final List<String> cartCodes = carts.map((cart) => cart.code).toList();
    final additionalCostsProviderAsynValue = ref.watch(additionalCostsProvider(cartCodes));

    return Scaffold(
      body: additionalCostsProviderAsynValue.when(
        loading: () => CircularProgressIndicator(),
        error: (error, stackTrace) {
          return ErrorDisplay(
            onButtonClicked: () => ref.refresh(additionalCostsProvider(cartCodes)),
          );
        },
        data: (results) {

          return Container();

        },
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

然后它会一遍又一遍地向服务器发出我的应用程序请求。

我相信问题出在.family修改器上。因为如果像下面的代码那样更改FutureProvider而不使用.family,则不会出现问题。

final additionalCostsProvider = FutureProvider.autoDispose<List<ExtraCost>>((ref) …
Run Code Online (Sandbox Code Playgroud)

dart flutter riverpod

3
推荐指数
1
解决办法
2960
查看次数

如何使用 swift 在 firestore 文档中的字段中设置空值?

在此输入图像描述

我想将 firestore 文档中的一个字段设置为空,就像lastEventApproval上图中的字段一样。

我尝试使用下面的代码创建一个文档

let data = ["lastEventApproval" : nil , other data here .....]
batch.setData(userDictionary, forDocument: ref)
Run Code Online (Sandbox Code Playgroud)

所以我想在成功创建文档时,有一个名为lastEventApprovalnull 的字段,如上图所示

但结果是......

lastEventApproval如果我使用该代码,则不存在。像这样 在此输入图像描述

在Android中,我可以使用这段代码制作类似的东西

val data = hashMapOf("lastEventApproval" to null)
batch.set(ref,data)
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么它在 iOS swift 中不起作用,也许我需要指定 nil 以外的其他值?

那么如何在 swift 中使 firestore 文档中的字段为空?

ios firebase swift google-cloud-firestore

2
推荐指数
1
解决办法
1881
查看次数

未找到测试文件:使用 Mocha 使用 Typescript 测试安全规则时“测试”

我试图在 stackoverflow 中找到类似的问题,但没有人能解决我的问题。

我正在尝试使用 Typescript 和 Mocha 测试我的 firebase 安全规则,但我什至无法运行我的测试

这是我的项目目录

在此输入图像描述

我使用以下代码安装我的开发依赖项:

npm install chai mocha ts-node @types/chai @types/mocha --save-dev
Run Code Online (Sandbox Code Playgroud)

这是我的开发依赖项

 "devDependencies": {
    "@firebase/rules-unit-testing": "^1.2.5",
    "@types/chai": "^4.2.15",
    "@types/mocha": "^8.2.2",
    "@types/uuid": "^8.3.0",
    "@typescript-eslint/eslint-plugin": "^3.9.1",
    "@typescript-eslint/parser": "^3.8.0",
    "chai": "^4.3.4",
    "eslint": "^7.6.0",
    "eslint-config-google": "^0.14.0",
    "eslint-plugin-import": "^2.22.0",
    "mocha": "^8.3.2",
    "ts-node": "^9.1.1",
    "typescript": "^3.9.9"
  },
Run Code Online (Sandbox Code Playgroud)

这是我的脚本 npm

"scripts": {
    "test": "mocha --exit"
  },
Run Code Online (Sandbox Code Playgroud)

但是当运行时npm run test,从functions目录我有错误

错误:未找到测试文件:“测试”

我尝试过使用

mocha --require ts-node/register --watch-extensions ts 'test/**/*.ts'
Run Code Online (Sandbox Code Playgroud)

我仍然有同样的错误。我应该怎么办?

mocha.js firebase

2
推荐指数
1
解决办法
2161
查看次数