首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在构建过程中调用setState()或markNeedsBuild()。(TextInputSettingsTile)

在构建过程中调用setState()或markNeedsBuild()。(TextInputSettingsTile)
EN

Stack Overflow用户
提问于 2022-08-05 13:59:47
回答 1查看 98关注 0票数 2

我是新来的,我正在用颤音写我的应用程序的设置部分(我正在使用这个包:屏风)。

我得到了"setState()或markNeedsBuild()在构建过程中调用的错误“。当我的TextInputSettingsTile值发生变化时。

我在网上读了很多信息,但我仍然不明白问题出在哪里。

这是我的main.dart:

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'pages/home.dart';
import 'pages/settings_page.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';


Future main() async {
  await Settings.init(cacheProvider: SharePreferenceCache());
  
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const LoginPage(title: 'TEST'),
    );
  }
}

class LoginPage extends StatefulWidget {
  const LoginPage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<LoginPage> createState() => LoginPageState();
}

class LoginPageState extends State<LoginPage> {
  final _username = TextEditingController();
  final _password = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('TEST'),
        actions: <Widget>[
          IconButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => SettingsPage()),
                );
              },
              icon: const Icon(Icons.settings))
        ],
      ),
      body: SingleChildScrollView(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.fromLTRB(
                  20, 0, 20, 10),
              child: TextField(
                controller: _username,
                decoration: InputDecoration(
                    icon: const Icon(Icons.email),
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(15.0),
                    ),
                    labelText: 'username'),
              ),
            ),
            Padding(
                padding: const EdgeInsets.fromLTRB(
                    20, 5, 20, 10),
                child: TextField(
                  controller: _password,
                  obscureText: true,
                  enableSuggestions: false,
                  autocorrect: false,
                  decoration: InputDecoration(
                      icon: const Icon(Icons.password_rounded),
                      border: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(15.0),
                      ),
                      labelText: 'password'),
                )),
            ElevatedButton(
                onPressed: () => {},
                child: const Text('LOGIN'))
          ],
        ),
      ),
    );
  }
}

这是我的设置一般页面:

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';
import 'settings/connection_page.dart';


class SettingsPage extends StatefulWidget {
  @override
  SettingsPageState createState() => SettingsPageState();
}

class SettingsPageState extends State<SettingsPage> {
  @override
  Widget build(BuildContext context) => Scaffold(
    appBar: AppBar(
      title: const Text('Settings')
    ),
        body: SafeArea(
          child: ListView(
            padding: const EdgeInsets.all(12),
            children: [
              const SizedBox(height: 5,),
              SettingsGroup(
                  title: 'GENERAL', children: const <Widget>[
                    ConnectionPage()
                  ]
              ),
            ],
          ),
        ),
      );
}

这是我的设置特定页面(在这里我得到了错误):

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

class ConnectionPage extends StatelessWidget {
  const ConnectionPage({Key? key}) : super(key: key);
  static const keyServer = 'key-server';

  @override
  Widget build(BuildContext context) => SimpleSettingsTile(
        title: 'Connection',
        subtitle: 'Parameters',
        leading: const FaIcon(FontAwesomeIcons.clipboardList),
        child: SettingsScreen(
          title: 'Connection',
          children: <Widget>[
            buildServer(),
          ],
        ),
      );

  Widget buildServer() => TextInputSettingsTile(
        settingKey: keyServer,
        title: 'Server',
        initialValue: ''
      );
}

我能做些什么来修复这个错误呢?

谢谢你们所有人。

EN

回答 1

Stack Overflow用户

发布于 2022-08-05 18:26:59

它下面的一些方法是在构建过程中调用setState。标识它并使用addPostFrameCallback方法。示例:

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';
import 'settings/connection_page.dart';


class SettingsPage extends StatefulWidget {
  @override
  SettingsPageState createState() => SettingsPageState();
}

class SettingsPageState extends State<SettingsPage> {
  @override
  Widget build(BuildContext context) => Scaffold(
    appBar: AppBar(
      title: const Text('Settings')
    ),
        body: SafeArea(
          child: ListView(
            padding: const EdgeInsets.all(12),
            children: [
              const SizedBox(height: 5,),

             WidgetsBinding.instance.addPostFrameCallback((_){
              SettingsGroup(
                  title: 'GENERAL', children: const <Widget>[
                    ConnectionPage()
                  ]),
             });
            ],
          ),
        ),
      );
}

尝试验证作为此示例。试着把它包装成WidgetsBinding.instance.addPostFrameCallback((_)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73250965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档