Flutter / Dart:处理后使用了TextEditingController

时间:2020-07-10 18:19:48

标签: flutter dart textfield dispose texteditingcontroller

请有人帮忙,我不确定这是不是一个框架故障,那么如何在此方面没有更多的帖子,如果是我,那么在此错误上就没有多少了!

=========================== main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

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

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDialog( context: context, builder: (context) { return MyDialog(); });
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

=========================== dialog_reusable.dart

import 'package:flutter/material.dart';

import 'dialog_reusable.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

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

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDialog( context: context, builder: (context) { return MyDialog(); });
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

===========================

===========================

复制步骤

  1. 文本字段是Dialog()的一部分,还有两个按钮“确定”和“取消”
  2. 使用标准选项创建新的Flutter项目
  3. 删除LIB文件夹中的文件
  4. 使用上面提供的代码和名称创建新文件
  5. 弹出Dialog()并单击“取消”按钮时,会发生以下错误。

════════小部件库library捕获了异常════════

在构建MouseRegion(侦听器:[enter,exit],状态:_MouseRegionState#1877d)时引发了以下断言: 处理后使用了TextEditingController。

一旦您在TextEditingController上调用了dispose(),便无法再使用它。

相关的引起错误的小部件是: TextField文件:/// C:/MobileApps/Apps/Clima-Flutter/lib/utilities/mydialog.dart:90:15

引发异常时,这是堆栈:

#0 ChangeNotifier._debugAssertNotDisposed。 (package:flutter / src / foundation / change_notifier.dart:106:9)

#1 ChangeNotifier._debugAssertNotDisposed(package:flutter / src / foundation / change_notifier.dart:112:6)

#2 ChangeNotifier.removeListener(软件包:flutter / src / foundation / change_notifier.dart:167:12)

#3 _AnimatedState.didUpdateWidget(程序包:flutter / src / widgets / transitions.dart:159:28)

#4 StatefulElement.update(程序包:flutter / src / widgets / framework.dart:4690:58)


尝试的步骤:

  1. 通过在Textfield的“启用”属性中使用变量来禁用Dispose()之前的Textfield
  2. 如果保留TextField的enable属性的变量在Dispose()之前通过三元运算符和if子句,则将NULL分配给TextField的“ Controller”属性
  3. 如果保留TextField启用属性的变量在Dispose()之前通过三元运算符和if子句,则将NULL分配给TextField的'onChanged:'属性

0 个答案:

没有答案