草庐IT

flutter radio 值不变

coder 2023-07-23 原文

我正在尝试设置一组非常简单的单选按钮,这就是为什么令人沮丧的是它们无法正常工作。我试过在类似的类(class)中设置它,并且成功了。我知道正在调用 setstate 的事实,但由于某种原因它没有更新单个单选按钮。这让我觉得这是一些与状态有关的奇怪问题。

无论如何,我们将不胜感激。我的主类是下面代码的第二部分。

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../bloc/thembloc.dart';
import './components/textfield.dart';

class SignUp extends StatefulWidget {
  @override
  _SignUpState createState() => _SignUpState();
}

class _SignUpState extends State<SignUp> {

  /*
  ui for signup
  includes multiple textfields.
  includes all of the information that we'll need
  to collect for an user to register an account. 
  todo: wrap everything in a form, encrypt it and send it to a private server.
  */
  @override
  Widget build(BuildContext context) {
    double _height = MediaQuery.of(context).size.height;
    double _width = MediaQuery.of(context).size.width;
    final double _margin = 16.0;
    final double _promptWidth = _width - 32.0;
    final double _promptHeight = _height - 32.0;
    final double _textFieldWidth = _promptWidth - 32.0;
    int subscriberValue;

    void switchSubscriber(int value) {
      setState(() {
       subscriberValue = value; 
      });
    }

    return BlocBuilder(
        bloc: BlocProvider.of<ThemeBloc>(context),
        builder: (context, ThemeState state) {
          return Scaffold(
            resizeToAvoidBottomInset: false,
            resizeToAvoidBottomPadding: false,
            appBar: AppBar(
              centerTitle: true,
              title: Text(
                "smartmoney",
                style: BlocProvider.of<ThemeBloc>(context).currentState.themedata.primaryTextTheme.display2,
              ),

              // appbar
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.only(
                      bottomLeft: Radius.circular(8.0),
                      bottomRight: Radius.circular(8.0))),
              leading: IconButton(
                icon: Icon(
                  Icons.arrow_back,
                  color: BlocProvider.of<ThemeBloc>(context).currentState.themedata.buttonColor,
                ),
                onPressed: () {
                  print("going back");
                },
              ),
              backgroundColor: BlocProvider.of<ThemeBloc>(context).currentState.themedata.canvasColor,
            ),
            body: Container(
              height: _height,
              width: _width,
              color: BlocProvider.of<ThemeBloc>(context).currentState.themedata.backgroundColor,
              child: Column(
                children: <Widget>[
                  Padding(
                    padding: EdgeInsets.only(top: _margin),
                    child: Container(
                      decoration: BoxDecoration(
                         borderRadius: BorderRadius.all(Radius.circular(8.0)),
                         color: BlocProvider.of<ThemeBloc>(context).currentState.themedata.canvasColor,
                         boxShadow: [
                           BoxShadow(
                               spreadRadius: 0.0,
                               color: Colors.black38,
                               blurRadius: 6.0,
                               offset: Offset(0.0, 3.0)),
                         ]),
                      width: _promptWidth,
                      height: _promptHeight - 48 - _margin,
                      child: Column(
                        children: <Widget>[
                          Text("Let's get started",
                          style: BlocProvider.of<ThemeBloc>(context).currentState.themedata.primaryTextTheme.display2,
                          ),
                          Text("Enter your information to create an account",
                          style: BlocProvider.of<ThemeBloc>(context).currentState.themedata.primaryTextTheme.subtitle,
                          ),
                          Padding(
                            padding: EdgeInsets.only(top: 8.0),
                            child: StyledTextField(
                              textFieldWidth: _textFieldWidth,
                              helperText: "First name",
                            ),
                          ),
                          Padding(
                            padding: EdgeInsets.only(top: 8.0),
                            child: StyledTextField(
                              textFieldWidth: _textFieldWidth,
                              helperText: "Last name",
                            ),
                          ),
                          Padding(
                            padding: EdgeInsets.only(top: 8.0),
                            child: StyledTextField(
                              textFieldWidth: _textFieldWidth,
                              helperText: "Email",
                            ),
                          ),
                          Padding(
                            padding: EdgeInsets.only(top: 8.0),
                            child: StyledTextField(
                              textFieldWidth: _textFieldWidth,
                              helperText: "Password",
                            ),
                          ),
                          Padding(
                            padding: EdgeInsets.only(top: 8.0),
                            child: StyledTextField(
                              textFieldWidth: _textFieldWidth,
                              helperText: "Phone number",
                            ),
                          ),
                          Text("Subscriber type",
                          style: BlocProvider.of<ThemeBloc>(context).currentState.themedata.primaryTextTheme.display1,
                          ),
                          Radio(
                            groupValue: subscriberValue,
                            value: 0,
                            onChanged: (int value) => switchSubscriber(value),
                          ),
                          Radio(
                            groupValue: subscriberValue,
                            value: 1,
                            onChanged: (int value) => switchSubscriber(value),
                          )
                        ],
                      ),
                    ),
                  )
                ],
              ),
          ),
          );
        });
  }
}

import 'package:flutter/material.dart';
import './bloc/thembloc.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'ui/signin.dart';
import 'ui/signup.dart';
import 'ui/onboarding.dart';
import './ui/testing/whatthefuck.dart';

void main() {
  runApp(
    MaterialApp(
      home: SmartMoney(),
    )
    // SmartMoney()
  );
}

class SmartMoney extends StatefulWidget {
  @override
  _SmartMoneyState createState() => _SmartMoneyState();
}

class _SmartMoneyState extends State<SmartMoney> {

  final _themeBloc = ThemeBloc();

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
        bloc: _themeBloc,
        child: SignUp(),
      );
  }
}

最佳答案

问题是因为您在 build 方法中定义了变量 subscriberValue。您正在使用 setState 调用来调用 build 方法,并且在每次调用 build 时,您都会丢失 subscriberValue。我建议您始终将控制小部件状态的变量用作类成员。

class _SignUpState extends State<SignUp> {

  // HAS TO BE CLASS MEMBER AND IT'S GOOD AN INITIAL VALUE TOO..
  int subscriberValue =1; // asuming that  1 is default radio button option 

  @override
  Widget build(BuildContext context) {
    //... some codes ...
    //int subscriberValue; REMOVE THIS LINE. YOU'RE LOSING THE VALUE IN EVERY setState call

    //You can define this method outside from build too.
    void switchSubscriber(int value) {
      setState(() {
        subscriberValue = value;
      });
    }
}

关于 flutter radio 值不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54957183/

有关flutter radio 值不变的更多相关文章

  1. Ruby 数组 - 如何使值在 nil 值上保持不变 - 2

    我正在处理一系列midi音高,看起来像这样......pitches=[60,nil,nil,nil,67,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil]在这种情况下,索引1、2和3上的间距仍然是60。索引4之后,音高仍然是67。如何编写一个方法来识别先前的非零值?目前我能想到的唯一方法看起来有点笨拙:defpitch_at_step(pitches,step)ifpitches.any?x=pitches[step]

  2. 不变之“DAO” - 2

    加州意识形态的先知们认为,只有自由市场和全球通信的控制论流和混沌漩涡才能决定未来。因此,政治辩论是一种浪费。作为自由主义者,他们断言由民主政府所调解的人民意志是一种危险的异端邪说,它妨碍了自然而有效地积累财产的自由。作为技术决定论者,他们相信人类社会和情感纽带阻碍了机器的有效进化。放弃了民主和社会团结,加州意识形态梦想着一个数字天堂,只由自由精神人格者栖居着。——安迪·卡梅伦和理查德·巴布鲁克,“加州意识形态”随着全球社会的兴起,我们正在经历的混乱中,声誉已经失去了很多意义。随着旧机构的倒台,在垂死的领域中的人们有一种甩卖心态,他们利用前几代人建立的声誉获利。由于我们的政治制度失败,政客们表现

  3. ruby - Nokogiri 保持 HTML 实体不变 - 2

    我希望Nokogiri保持HTML实体不变,但它似乎正在将实体转换为实际符号。例如:Nokogiri::HTML.fragment('®').to_s结果:"®"似乎没有任何东西可以将原始HTML返回给我。.inner_html、.text、.content方法都返回'®'而不是'®'有没有办法让Nokogiri保持这些HTML实体不变?我已经搜索过stackoverflow并找到了类似的问题,但没有一个与这个问题完全相同。 最佳答案 这不是一个理想的答案,但您可以通过设置允许的编码来强制它生成实体(如果不是好听的名

  4. javascript - Three.js 将对象添加到组中但保持全局位置/旋转/比例不变 - 2

    我想将一个对象从一个组(或世界/场景)移动到另一个组,但要保持其全局转换不变。基本上,我不想看到对象发生变化。基本上,是这样的://storecurrentworldtransformationvarorigWorldMatrix=myObject.matrixWorld.clone();//moveobjecttoagroup(thatispositionedandrotatedarbitrarily)someGroup.add(myObject);//restorepreviousworldtransformationmyObject.matrixWorld.copy(origWo

  5. javascript - React-Redux/Jest 不变违规 : Could not find "store" - 2

    我设置了一个简单的测试文件,几乎与create-react-app使用的文件相同:App.test.jsimportReactfrom'react';importReactDOMfrom'react-dom';import{App}from'./App';it('renderswithoutcrashing',()=>{constdiv=document.createElement('div');ReactDOM.render(,div);});当我运行yarntest我不断收到此错误消息:InvariantViolation:Couldnotfind"store"ineitherth

  6. javascript - 将第一个对象推到 javascript 数组中的最后一个,保持所有其他值不变 - 2

    我有以下JavaScript数组:vardays=[{"day":"sunday","morning":"geschlossen",},{"day":"monday","morning":"geschlossen",},{"day":"tuesday","morning":"geschlossen",},{"day":"wenesday","morning":"geschlossen",},{"day":"thursday","morning":"16:30-19:00Uhr",},{"day":"friday","morning":"09:00-18:00Uhr",},{"day":

  7. javascript - 在调整大小的容器中重新排列网格元素,保持一个图 block 不变 - 2

    我有一个网格,它被设计成固定的宽度和高度。请参见下图。此网格必须适用于所有屏幕尺寸,同时使网格中的元素保持在相同的位置。我的代码目前根据设计的原始宽度/高度调整这些元素的大小,并使其适应新的宽度/高度。尽管在下面的示例中它们没有正确定位,但计算确实有效。我遇到的困难是,我需要将504x504的中心网格图block设为静态,并考虑到这一点调整其他图block。目前所有元素,包括中间的调整,我只想停止调整中间的元素,而其他元素则删除/添加差异到它们的宽度/高度。这很难解释,如果我可以添加更多详细信息,请告诉我。constinitalWidth=1043;constinitialHeight

  8. javascript - 如何检查 ES6 "variable"是否不变? - 2

    有谁知道一些技巧如何做到这一点?我尝试使用try-catch:"usestrict";consta=20;varisConst=false;try{vartemp=a;a=a+1;a=temp;}catch(e){isConst=true;}但不幸的是,它只能在“严格”模式下工作。如果不使用“usestrict”,它会静默执行所有语句,而不会修改a。此外,我无法将此代码包装到一些方便的函数中(例如isConstant(someConst)),因为我将传递给该函数的任何参数都将是一个新变量。所以有人知道如何创建isConstant()函数吗? 最佳答案

  9. javascript - 尝试使用自定义图标创建 TabBarIOS 时发生不变冲突错误 - 2

    我在这里主要想完成的是合并这两个教程(x)(x)为了创建一个具有自定义图标的简单TabBar。我正在尝试使用react-native-vector-icons库中的图标,我已将其添加到我的节点模块中。但是,我遇到了一个障碍:InvariantViolation:Elementtypeisinvalid:expectedastring(forbuilt-in>components)oraclass/function(forcompositecomponents)butgot:undefined.Youlikelyforgottoexportyourcomponentfromthefile

  10. javascript - 遍历 children 的 children 并为所有 input 添加函数,同时保持其他 children 不变 - 2

    我一直在尝试让它工作一段时间,但不确定如何执行以下操作。我的表单组件有包含常规html标记和输入的子组件。如果child是输入,我想添加attachToForm和detachFromForm函数。如果它不是输入,我想继续遍历子项以确保该元素没有子输入字段。无论该元素是否是输入,我仍然希望它出现在我的页面上,我只是想将功能添加到输入。问题是我只能让我的函数只返回输入,删除标签和标题。我知道那是因为我只向newChildren添加带有输入的元素,但是如果我将其他元素推送到elseif部分,我会得到重复项,我可以想到另一种方法来执行此操作。我不确定我是不是不了解基本的JS还是脑子有问题。Re

随机推荐