Flutter 当我导航到另一个小部件时,如何在flatter中修复此错误(查找停用的小部件';的祖先是不安全的)
完整的错误消息是: 查找停用小部件的祖先是不安全的。在这一点上,, 小部件元素树的状态不再稳定。安全地 在dispose()方法中引用小部件的祖先,保存引用 通过在 widget的didChangeDependencies()方法 当我打开另一个小部件时出现了这个错误,但是第一个小部件中的请求仍然在后台工作。在第一个小部件中,当第一个小部件完成时,我先调用request,然后调用另一个请求,并使用Flutter 当我导航到另一个小部件时,如何在flatter中修复此错误(查找停用的小部件';的祖先是不安全的),flutter,unsafe,Flutter,Unsafe,完整的错误消息是: 查找停用小部件的祖先是不安全的。在这一点上,, 小部件元素树的状态不再稳定。安全地 在dispose()方法中引用小部件的祖先,保存引用 通过在 widget的didChangeDependencies()方法 当我打开另一个小部件时出现了这个错误,但是第一个小部件中的请求仍然在后台工作。在第一个小部件中,当第一个小部件完成时,我先调用request,然后调用另一个请求,并使用if(mounted){}将它们包装起来,以避免出现此问题,但问题仍然存在 import 'pack
if(mounted){}
将它们包装起来,以避免出现此问题,但问题仍然存在
import 'package:animate_do/animate_do.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:lawyers/core/configs.dart';
import 'package:lawyers/core/custom_route.dart';
import 'package:lawyers/models/helper.dart';
import 'package:lawyers/providers/metaDataProvider.dart';
import 'package:lawyers/views/_Office/OfficeClientsScreens/officeClientAddNew.dart';
import 'package:lawyers/views/_Office/OfficeClientsScreens/officeClientDisplay.dart';
import 'package:lawyers/views/_Office/OfficeClientsScreens/officeClientEdit.dart';
import 'package:lawyers/views/_Office/OfficeClientsScreens/searchOfficeClientsFilterDrawer.dart';
import 'package:lawyers/views/widgets/custom_expansion_tile.dart' as custom;
import 'package:lawyers/core/lang.dart';
import 'package:lawyers/views/widgets/constants.dart';
import 'package:lawyers/views/widgets/loadingWidgets.dart';
import 'package:lawyers/views/widgets/widgetNoHaveData.dart';
import 'package:provider/provider.dart';
import 'package:lawyers/providers/usersProvider.dart';
import '../../profileDrawer.dart';
import '../../widgets/widgetsCol.dart';
class OfficeClientsScreen extends StatefulWidget {
@override
_OfficeClientsScreenState createState() => _OfficeClientsScreenState();
}
final GlobalKey<ScaffoldState> _officeClientsPageKey = GlobalKey<ScaffoldState>();
class _OfficeClientsScreenState extends State<OfficeClientsScreen> {
TextEditingController _search = TextEditingController();
TextEditingController _filter = TextEditingController();
TextEditingController _officeId = TextEditingController();
TextEditingController _officeName = TextEditingController();
dynamic data;
bool loadingPage;
@override
void initState() {
super.initState();
startTimer();
_filter.text = '0';
_officeId.text = '';
_officeName.text = '';
loadingPage = true;
data = null;
}
@override
void dispose() {
super.dispose();
stopTimer();
}
@override
void deactivate() {
stopTimer();
super.deactivate();
}
@override
void didChangeDependencies() {
if (mounted) {
Provider.of<MetaDataProvider>(context, listen: false)
.apiGetSpecificMetaDataRequest(
context: context,
mounted: mounted,
usersType: true,
idsType: true,
genders: true,
countries: true,
cities: true,
usersRole: true,
officeBranches: false,
)
.whenComplete(() {
if (mounted) {
data = Provider.of<UsersProvider>(context, listen: false)
.apiGetAllClients(
context: context,
pageNumber: 1,
pageSize: 200,
name: _filter.text == '0' ? _search.text : '',
mobile: _filter.text == '1' ? _search.text : '',
identityNumber: _filter.text == '2' ? _search.text : '',
roleId: int.parse(Configs.clientRoleId),
officeId: Configs.officeId,
)
.whenComplete(() {
if (mounted) {
setState(() {
loadingPage = false;
});
}
});
}
});
}
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
var usersIdList =
Provider.of<UsersProvider>(context, listen: true).allClientsList;
return Directionality(
textDirection:
Lang.lang == "ar" ? TextDirection.rtl : TextDirection.ltr,
child: Scaffold(
key: _officeClientsPageKey,
appBar: _buildAppBar(),
body: GestureDetector(
onTap: () => FocusScope.of(context).requestFocus(FocusNode()),
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
//text form field search
_buildSearchBar(),
//the content of page
FutureBuilder(
future: data,
builder: (context, snapshot) {
return snapshot.hasData && !loadingPage
? Expanded(
child: SlideInUp(
//get content list page
child: usersIdList.isNotEmpty
//build content page
? _buildContentOfPage(usersIdList)
//no have data
: NoHaveData(nameDataType: t('clients'))),
)
//loading widget
: BuildSkeletonWidget();
},
)
],
),
),
),
//float button (add new client)
floatingActionButton: _buildFloatingActionButton(),
//get profile current user drawer
drawer: ProfileDrawer(),
//get search filter
));
}
//end my cases page widget
}
import'package:animate_do/animate_do.dart';
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“包:颤振图标/颤振图标.dart”;
导入“包:lawyers/core/configs.dart”;
导入“包:律师/core/custom_route.dart”;
导入“包:律师/models/helper.dart”;
导入“包:律师/提供者/元数据提供者.dart”;
导入“包:律师/views/_Office/officeclientscreens/officeclientadnew.dart”;
导入“包:律师/views/_Office/officeclients屏幕/officeClientDisplay.dart”;
导入“包:律师/views/_Office/OfficeClientsScreens/OfficeClientIt.dart”;
导入“包:律师/views/_Office/officeclientscreens/searchOfficeClientsFilterDrawer.dart”;
导入“包:律师/views/widgets/custom_expansion_tile.dart”作为自定义;
导入“包:lawyers/core/lang.dart”;
导入“package:layers/views/widgets/constants.dart”;
导入“package:lawyers/views/widgets/loadingWidgets.dart”;
导入“package:lawyers/views/widgets/widgetNoHaveData.dart”;
导入“包:provider/provider.dart”;
导入“包:律师/提供者/用户Provider.dart”;
导入“../profileDrawer.dart”;
导入“../widgets/widgetsCol.dart”;
类OfficeClient屏幕扩展StatefulWidget{
@凌驾
_OfficeClientsScreenState createState()=>\u OfficeClientsScreenState();
}
最终GlobalKey _officeClientsPageKey=GlobalKey();
类_OfficeClientsScreenState扩展状态{
TextEditingController_search=TextEditingController();
TextEditingController_filter=TextEditingController();
TextEditingController_officeId=TextEditingController();
TextEditingController_officeName=TextEditingController();
动态数据;
bool加载页面;
@凌驾
void initState(){
super.initState();
startTimer();
_filter.text='0';
_officeId.text='';
_officeName.text='';
loadingPage=true;
数据=空;
}
@凌驾
无效处置(){
super.dispose();
停止计时器();
}
@凌驾
无效停用(){
停止计时器();
super.deactivate();
}
@凌驾
void didChangeDependencies(){
如果(已安装){
Provider.of(上下文,侦听:false)
.apiGetSpecificMetaDataRequest(
上下文:上下文,
挂载:挂载,,
usersType:对,
idsType:对,
性别:对,
国家:是的,
城市:没错,
usersRole:true,
公务员:假,
)
.完成时(){
如果(已安装){
data=Provider.of(上下文,侦听:false)
.ApigetAllClient(
上下文:上下文,
页码:1,
页面大小:200,
名称:_filter.text==“0”?_search.text:“”,
手机:_filter.text==“1”?_search.text:“”,
identityNumber:_filter.text==“2”?_search.text:“”,
roleId:int.parse(Configs.clientRoleId),
officeId:配置s.officeId,
)
.完成时(){
如果(已安装){
设置状态(){
loadingPage=false;
});
}
});
}
});
}
super.didChangeDependencies();
}
@凌驾
小部件构建(构建上下文){
var usersIdList=
Provider.of(context,listen:true);
返回方向性(
文本方向:
Lang.Lang==“ar”?TextDirection.rtl:TextDirection.ltr,
孩子:脚手架(
密钥:_officeClientsPageKey,
appBar:_buildAppBar(),
正文:手势检测器(
onTap:()=>FocusScope.of(context).requestFocus(FocusNode()),
子:容器(
子:列(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
//文本表单字段搜索
_buildSearchBar(),
//页面内容
未来建设者(
未来:数据,
生成器:(上下文,快照){
返回snapshot.hasData&!加载页面
?扩大(
子:SlideInUp(
//获取内容列表页面
子项:usersIdList.isNotEmpty
//构建内容页
?_buildContentOfPage(usersIdList)
//没有数据
:NoHaveData(nameDataType:t('clients')),
)
//加载小部件
:BuildSkeletonWidget();
},
)
],
),
),
),
//浮动按钮(添加新客户端)
floatingActionButton:\u buildFloatingActionButton(),
//获取配置文件当前用户抽屉
抽屉:ProfileDrawer(),
//获取搜索筛选器
));
}
//结束我的案例页面小部件
}