Flutter 当我导航到另一个小部件时,如何在flatter中修复此错误(查找停用的小部件';的祖先是不安全的)

Flutter 当我导航到另一个小部件时,如何在flatter中修复此错误(查找停用的小部件';的祖先是不安全的),flutter,unsafe,Flutter,Unsafe,完整的错误消息是: 查找停用小部件的祖先是不安全的。在这一点上,, 小部件元素树的状态不再稳定。安全地 在dispose()方法中引用小部件的祖先,保存引用 通过在 widget的didChangeDependencies()方法 当我打开另一个小部件时出现了这个错误,但是第一个小部件中的请求仍然在后台工作。在第一个小部件中,当第一个小部件完成时,我先调用request,然后调用另一个请求,并使用if(mounted){}将它们包装起来,以避免出现此问题,但问题仍然存在 import 'pack

完整的错误消息是:

查找停用小部件的祖先是不安全的。在这一点上,, 小部件元素树的状态不再稳定。安全地 在dispose()方法中引用小部件的祖先,保存引用 通过在 widget的didChangeDependencies()方法

当我打开另一个小部件时出现了这个错误,但是第一个小部件中的请求仍然在后台工作。在第一个小部件中,当第一个小部件完成时,我先调用request,然后调用另一个请求,并使用
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(),
//获取搜索筛选器
));
} 
//结束我的案例页面小部件
}