setState() 方法不更新小部件

时间:2021-06-07 20:00:08

标签: flutter flutter-layout

它没有更新我的小部件。如果我点击开关打开 _darkMode 开关总是向后移动(不改变)...

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

class SettingsScreen extends StatefulWidget {
  const SettingsScreen({Key? key}) : super(key: key);

  @override
  _SettingsScreenState createState() => _SettingsScreenState();
}

class _SettingsScreenState extends State<SettingsScreen> {
  @override
  Widget build(BuildContext context) {
    bool _darkMode = false;

return Container(
    child: ListView(
  children: [
    ListTile(
      title: const Text('Lights'),
      trailing: CupertinoSwitch(
        value: _darkMode,
        onChanged: (bool value) {
          setState(() {
            _darkMode = value;
            print('DarkMode: $_darkMode');
          });
        },
      ),
    ),
  ],
));

} }

1 个答案:

答案 0 :(得分:2)

_darkMode 必须是小部件状态中的字段。将它移到构建方法之外:

  class _SettingsScreenState extends State<SettingsScreen> {
  
  bool _darkMode = false;

  @override
  Widget build(BuildContext context) {