latienitializationerror:field' insertfunction尚未初始化

发布于 2025-01-25 16:21:58 字数 4211 浏览 2 评论 0原文

我是新手的扑朔迷离,真的很陷入困境。我正在尝试创建一个搜索功能,该搜索功能使用关键字在我的SQFite数据库中调用列表。数据库都可以正常工作,但是当我在搜索栏中插入一个关键字时,应用程序的一部分会崩溃,并带有以下错误:

lateInitializationerror:field'insertfunction'尚未初始化。 createState会引发错误,然后它需要插入和删除功能数据,我将其cans to做到这一点,因为它不能将逻辑传递到createstate中。

任何帮助将不胜感激。我需要解决我的创作问题和延迟启动问题。

这是代码:

class SearchPage extends StatefulWidget {
 @override
  _SearchPageState createState() => _SearchPageState();//createState is throwing an error and 
                                                       as that I insert insertFunction and 
                                                       deleteFunction here. But if i do, it 
                                                      also say I should not put logic into 
                                                      createState. 
         }

   class _SearchPageState extends State<SearchPage> {
   late final Function insertFunction;
   late final Function deleteFunction;
   var db = DatabaseConnect();
   String keyword = '';

      _SearchPageState({required this.insertFunction,required this.deleteFunction,});

       @override
       Widget build(BuildContext context) {

       return Scaffold(
        appBar: AppBar(
        title: const Text('Search My Clients'),
          leading: GestureDetector(
           onTap: () {
           Navigator.of(context).pushReplacementNamed('/homePage');
          },
          child: const Icon(
          Icons.arrow_back,
           ),
         ),
        ),
        body: SingleChildScrollView(
         child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
           Padding(
            padding: const EdgeInsets.all(15.0),
            child: TextField(
            autofocus: true,
             decoration: const InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'keyword',
                prefixIcon: Icon(Icons.search)),
                onChanged: (value) {
                keyword = value;
                 setState(() {});
                },
               ),
             ),
              FutureBuilder(
               future: db.searchContacts(keyword),
                builder: (context, AsyncSnapshot<List> snapshot) {
                if (snapshot.hasError) const Text('error');
                var data = snapshot.data;
                var datalength = data!.length;

                 if (snapshot.hasData) {
                 return datalength == 0
                    ? const Center(
                        child: Text('no data found'),
                      )
                    : Container(
                        child: LimitedBox(
                          maxHeight: 200,
                          child: ListView.builder(
                            scrollDirection: Axis.vertical,
                            itemCount: datalength,
                            shrinkWrap: true,
                            itemBuilder: (context, i) => CustomerCard(
                              id: data[i].id,
                              title: data[i].title,
                              name: data[i].name,
                              phone: data[i].phone,
                              fax: data[i].fax,
                              email: data[i].email,
                              street: data[i].street,
                              city: data[i].city,
                              town: data[i].town,
                              code: data[i].code,
                              isExpanded: data[i].isExpanded,
                              insertFunction: insertFunction,
                              deleteFunction: deleteFunction,
                            ),
                          ),
                        ),
                      );
                        } else {
                        return const Center(
                       child: Text('no data found'),
                              );
                             }
                           }),
                           ],
                          ),
                          ),
                        );
                       }
                    }

I'm new to flutter and really stuck.I am trying to create a search function that calls a list in my Sqfite database, using a keyword. The database all works fine, but when I insert a keyword in my searchbar that part of the app crashes with the following error:

LateInitializationError: Field 'insertFunction' has not been initialized.Im using the insertFunction and deleteFunction parameters and the constructor, but my createState throws an error then that it needs insert and deleteFunction data, which I cannto do as one cannot pass logic into createState.

Any help will be much appreciated. I need to solve my createState problem and my Lateinitialization problem.

Here is the code:

class SearchPage extends StatefulWidget {
 @override
  _SearchPageState createState() => _SearchPageState();//createState is throwing an error and 
                                                       as that I insert insertFunction and 
                                                       deleteFunction here. But if i do, it 
                                                      also say I should not put logic into 
                                                      createState. 
         }

   class _SearchPageState extends State<SearchPage> {
   late final Function insertFunction;
   late final Function deleteFunction;
   var db = DatabaseConnect();
   String keyword = '';

      _SearchPageState({required this.insertFunction,required this.deleteFunction,});

       @override
       Widget build(BuildContext context) {

       return Scaffold(
        appBar: AppBar(
        title: const Text('Search My Clients'),
          leading: GestureDetector(
           onTap: () {
           Navigator.of(context).pushReplacementNamed('/homePage');
          },
          child: const Icon(
          Icons.arrow_back,
           ),
         ),
        ),
        body: SingleChildScrollView(
         child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
           Padding(
            padding: const EdgeInsets.all(15.0),
            child: TextField(
            autofocus: true,
             decoration: const InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'keyword',
                prefixIcon: Icon(Icons.search)),
                onChanged: (value) {
                keyword = value;
                 setState(() {});
                },
               ),
             ),
              FutureBuilder(
               future: db.searchContacts(keyword),
                builder: (context, AsyncSnapshot<List> snapshot) {
                if (snapshot.hasError) const Text('error');
                var data = snapshot.data;
                var datalength = data!.length;

                 if (snapshot.hasData) {
                 return datalength == 0
                    ? const Center(
                        child: Text('no data found'),
                      )
                    : Container(
                        child: LimitedBox(
                          maxHeight: 200,
                          child: ListView.builder(
                            scrollDirection: Axis.vertical,
                            itemCount: datalength,
                            shrinkWrap: true,
                            itemBuilder: (context, i) => CustomerCard(
                              id: data[i].id,
                              title: data[i].title,
                              name: data[i].name,
                              phone: data[i].phone,
                              fax: data[i].fax,
                              email: data[i].email,
                              street: data[i].street,
                              city: data[i].city,
                              town: data[i].town,
                              code: data[i].code,
                              isExpanded: data[i].isExpanded,
                              insertFunction: insertFunction,
                              deleteFunction: deleteFunction,
                            ),
                          ),
                        ),
                      );
                        } else {
                        return const Center(
                       child: Text('no data found'),
                              );
                             }
                           }),
                           ],
                          ),
                          ),
                        );
                       }
                    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

人疚 2025-02-01 16:21:58

这就是您的代码的方式

class SearchPage extends StatefulWidget {
@override
  _SearchPageState createState() => _SearchPageState(); 
}

class _SearchPageState extends State<SearchPage> {
  insertFunction(){
    //function body goes here
  } 

  deleteFunction(){
    //function body goes here
  }

  var db = DatabaseConnect();
  String keyword = '';
  //the rest goes here

This is how your code should be

class SearchPage extends StatefulWidget {
@override
  _SearchPageState createState() => _SearchPageState(); 
}

class _SearchPageState extends State<SearchPage> {
  insertFunction(){
    //function body goes here
  } 

  deleteFunction(){
    //function body goes here
  }

  var db = DatabaseConnect();
  String keyword = '';
  //the rest goes here
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文