成员 'setState' 只能在 'package:flutter/src/widgets/framework.dart' 的子类的实例成员中使用
Posted
技术标签:
【中文标题】成员 \'setState\' 只能在 \'package:flutter/src/widgets/framework.dart\' 的子类的实例成员中使用【英文标题】:The member 'setState' can only be used within instance members of subclasses of 'package:flutter/src/widgets/framework.dart'成员 'setState' 只能在 'package:flutter/src/widgets/framework.dart' 的子类的实例成员中使用 【发布时间】:2019-11-02 07:18:33 【问题描述】:(i18n) 我使用 MyApp 类之外的 setState 来更改语言,我收到此警告,但不知道如何解决。
info: The member 'setState' can only be used within instance members of subclasses of 'package:flutter/src/widgets/framework.dart'. (invalid_use_of_protected_member at [flutter_firebase_authen] lib\app.dart:22)
class MyApp extends StatefulWidget
final FirebaseAnalyticsObserver observer;
const MyApp(
Key key,
@required this.observer,
) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
static void setLocale(BuildContext context, Locale newLocale)
final _MyAppState state = context.ancestorStateOfType(const TypeMatcher<_MyAppState>());
state.setState(()
state.locale = newLocale;
);
【问题讨论】:
尝试:不要使用static和final。 【参考方案1】:警告信息很清楚:函数setState
只能从类中调用,不能从其他类中调用。
解决方法很简单,在 State
类中编写一个帮助函数,为您调用 setState
。例如:
refresh() => setState(() );
现在你可以在这个班级之外拨打state.refresh()
。
(但实际上,如果您从另一个班级调用setState
,也许您应该查看ValueNotifier
,或StreamBuilder
等)
【讨论】:
以上是关于成员 'setState' 只能在 'package:flutter/src/widgets/framework.dart' 的子类的实例成员中使用的主要内容,如果未能解决你的问题,请参考以下文章
React - setState(...): 只能更新一个挂载或挂载的组件
“警告:setState(...):只能更新已安装或已安装的组件”是啥意思?
React 警告:setState(...) 只能更新已安装或正在安装的组件