Flutter Switch与Checkbox 赋值及变更状态应注意的问题

文章讨论了在Flutter应用中使用staticbool变量来维护Switch和Checkbox控件的状态,以及onChanged事件的处理。遇到的问题包括静态变量的限制、控件更新和状态同步。作者尝试使用GlobalKey来解决状态获取问题,但遇到了困难。
摘要由CSDN通过智能技术生成
  1. static bool? _isChecked=false; //
  2. static bool _isSwitchChecked=false;
  3. value必须是static不能动态,且一个可为空一个不可为空。 value不是static 则控件不更新新值。 网上有说用key获取状态,调试过行不通,为null
    4.两个控件的 onChanged: (newValue)的(newValue)居然一个取反一个未取反
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }
  static bool? _isChecked=false; //维护单选开关状态
  static bool _isSwitchChecked=false; //维护单选开关状态
  final GlobalKey<FormFieldState> key_Switch = GlobalKey();
  final GlobalKey<FormFieldState> key_Checkbox = GlobalKey();
  
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Switch(
              key:key_Switch,
              value:_isSwitchChecked,//当前状态
              onChanged:(value){
                //重新构建页面
                setState(() {
                  _isSwitchChecked = value;
                });
              },
            ),
            Checkbox(
              key:key_Checkbox,
              value: _isChecked , // 当前选中状态
              onChanged: (newValue) {
                // 当 Checkbox 状态改变时触发的回调函数
                setState(() {
                  _isChecked = newValue!;
                  print("aab:${key_Checkbox}");
                  //  print(_isChecked);
                });
                print(_isChecked);
              },
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值