当前位置: 首页 > 知识库问答 >
问题:

使用Firestore boolean设置开关的值

姚雅珺
2023-03-14

我正在制作一个测试应用程序,它在萤幕还原中切换布尔值。我需要这个应用程序从萤幕还原中检索开关的初始值。通过我的方法,我得到错误类型“未来”不是类型“bool”的子类型。布尔值被称为LEDOn。这是我的应用程序

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  final db = Firestore.instance;

  void updateLED(bool newValue) async {
    await db
        .collection('LEDStatus')
        .document('LEDStatus')
        .updateData({'LEDOn': newValue});
  }

  Future<dynamic> checkLEDStatus() async {
    DocumentSnapshot snapshot =
        await db.collection('LEDStatus').document('LEDStatus').get();
    return snapshot.data['LEDOn'];
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(brightness: Brightness.dark),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Thingspeak'),
        ),
        body: Column(
          children: <Widget>[
            Switch(
                value: checkLEDStatus(),
                onChanged: (bool newValue) {
                  setState(() {
                    print(newValue);
                    updateLED(newValue);
                  });
                })
          ],
        ),
      ),
    );
  }
}

共有2个答案

耿学义
2023-03-14

Switch小部件具有属性value,该属性的值类型为bool。当前在代码中返回的是一个未来,这就是为什么会出现错误。应该是这样的:

Switch(
  value: isSwitched,
  onChanged: (value) {
    setState(() {
      isSwitched = value;
    });
  },

您可以从initState中的firestore中检索布尔值,然后将其分配给属性。然后,当用户在setState()内切换时,调用更新方法并执行isSwitched=newValue

傅雪松
2023-03-14

使用FutureBuilder。另外,将返回类型更改为Future

FutureBuilder(
    future: checkLEDStatus(),
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        bool result = snapshot.data;
        return Switch(value: result, onChanged: (bool newVal) {
          setState(() => result = newVal);
          updateLED(newVal);
        });
      } else {
        return Center(child: CircularProgressIndicator());
      }
    }
)

 类似资料:
  • 问题内容: 我有一段JS代码来生成随机数,并将它们输出为变量,以代替旋转值在此使用 上面的代码工作正常,但是当我尝试将javascript中的变量粘贴进去时,我无法正常工作。我是新来的人,所以我90%肯定我只是没有正确了解该变量的语法(严重的是,我很难记住某些内容是否需要方括号,引号,波浪状等,我已经尽力了。) 。 或可能是因为变量是函数的局部变量,而CSS无法读取该变量。 因此,基本上,我只需要

  • 请求header Domain liveapi.mudu.tv POST /v2/oldopenapi/micro-act/api/activity_config?act_id={频道id} Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOK

  • 问题内容: 当您想使用Javascript更改HTML时,如何知道何时使用以下任一方法? 问题答案: 设置通常用于输入/表单元素。通常用于div,span,td和类似元素。

  • 一、简介 用于站点管理,发布点管理,基本设置,安全配置,PHPSSO配置,邮箱配置,connect,管理员管理,角色管理等基本管理和系统的相关设置等。 二、功能演示 站点管理 发布点管理

  • 关注设置 此操作设置一键关注快捷键 当浏览商城的时候会弹出“您当前还未关注微信公众号“,提醒关注

  • 本文向大家介绍用于C ++开发的Eclipse设置,包括了用于C ++开发的Eclipse设置的使用技巧和注意事项,需要的朋友参考一下 步骤0-安装MinGW GCC或Cygwin GCC 要将Eclipse用于C / C ++编程,您需要一个C / C ++编译器。在Windows上,您可以安装MinGW GCC或Cygwin GCC。如果不确定,请选择MinGW,因为MinGW较轻且易于安装,