属性“长度”无法无条件访问,因为接收器可以为null

发布于 2025-02-01 09:32:04 字数 2054 浏览 2 评论 0原文

import 'package:flutter/material.dart';
import 'package:notes/db/database_provider.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
     initialRoute: "/",
     routes: {
       "/":(context)=>HomeScreen()
     },
    );
  }
}
class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  getNotes()async{
    final notes = await DatabaseProvider.db.getNotes();
    return notes;
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Notes"),
      ),
      body: FutureBuilder(
        future: getNotes(),
        builder: (context,noteData){
          switch(noteData.connectionState){
            case ConnectionState.waiting:
              {
                return Center(child: CircularProgressIndicator(),);
              }
            case ConnectionState.done:
              {
                if(noteData.data !=null){
                  return Padding(
                    padding:  const EdgeInsets.all(8.0),
                    child: ListView.builder(
                      itemCount:noteData.data!.length,
                      itemBuilder: (context,index){
                        String title=noteData.data[index]['title'];
                      },

                    ),
                  );
                }

                else {

                    return Center(
                      child:  Text("You don't have any notes yet,create one?"),
                    );

                }
              }
          }
        },
      ),
    );
  }
}



因此,我正在使用SQF Lite从YouTube上的DocorCode获取指导,我编写了相同的代码,但它显示了与Null检查有关的一些错误,但我无法绕过它们,无论如何,我都无法绕过它们。

无论我添加什么添加空检查或它总是显示出错误的任何内容,无论如何都可以关闭零检查,请告诉我如何解决问题。

import 'package:flutter/material.dart';
import 'package:notes/db/database_provider.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
     initialRoute: "/",
     routes: {
       "/":(context)=>HomeScreen()
     },
    );
  }
}
class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  getNotes()async{
    final notes = await DatabaseProvider.db.getNotes();
    return notes;
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Notes"),
      ),
      body: FutureBuilder(
        future: getNotes(),
        builder: (context,noteData){
          switch(noteData.connectionState){
            case ConnectionState.waiting:
              {
                return Center(child: CircularProgressIndicator(),);
              }
            case ConnectionState.done:
              {
                if(noteData.data !=null){
                  return Padding(
                    padding:  const EdgeInsets.all(8.0),
                    child: ListView.builder(
                      itemCount:noteData.data!.length,
                      itemBuilder: (context,index){
                        String title=noteData.data[index]['title'];
                      },

                    ),
                  );
                }

                else {

                    return Center(
                      child:  Text("You don't have any notes yet,create one?"),
                    );

                }
              }
          }
        },
      ),
    );
  }
}



So, I am making a notes app using SQF lite taking guidance from DocorCode on youtube, i wrote the same code but its showing some errors related to null checks and i am unable to bypass them not matter what.

no matter what I do add null checks or anything it always shows error , is there anyway to switch off the null check , Please tell me how to fix the problem.

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

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

发布评论

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

评论(1

该问题是在title = noceData.data [index] ['title']上出现的,因为可以将数据删除。当您在最高级别检查NULL时,您可以在此处使用或更好的方法根据情况提供默认值。

String title = noteData.data![index]['title'];
String title = noteData.data?[index]['title']?? "default text";

至于FutureBuilder(包括数据类型)提供了更大的灵活性。用模型替换int,您可以使其无效,或者只需通过getNotes
传递空列表。
future lt; list&lt; note&gt;&gt; getNotes()async {...}

使用futureBuilder statefulwidget 将回忆起API ON SETSTATE(状态更改)。更好地使用initstate

提供默认的返回switch案例,包括.haserror是一个不错的选择。

      body: FutureBuilder<List<int>>(
        future: getNotes(),
        builder: (context, noteData) {
          switch (noteData.connectionState) {
            case ConnectionState.waiting:
              {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            case ConnectionState.done:
              {
                if (noteData.hasData) {
                  return Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: ListView.builder(
                      itemCount: noteData.data?.length,
                      itemBuilder: (context, index) {
                        // String title = noteData.data![index]['title'];
                        String title = noteData.data![index].toString();

                        return Text(title);
                      },
                    ),
                  );
                } else {
                  return const Center(
                    child: Text("You don't have any notes yet,create one?"),
                  );
                }
              }

            default:
              return CircularProgressIndicator();
          }
        },
      ),

探索更多有关

The issue arise on title=noteData.data[index]['title'] because it is possible to get null on data. As you've checked null on top level, you can use ! here or better approach is providing default value based on cases.

String title = noteData.data![index]['title'];
String title = noteData.data?[index]['title']?? "default text";

As for the FutureBuilder including data type provide more flexibility. Replace int with your model and you can make it nullable or just pass empty list from getNotes.
Future<List<Note>> getNotes() async {...}

Useing FutureBuilder inside StatefulWidget will recall the api on on setState(state change). Better use initState

Provide a default return from switch case, including .hasError is a good choice.

      body: FutureBuilder<List<int>>(
        future: getNotes(),
        builder: (context, noteData) {
          switch (noteData.connectionState) {
            case ConnectionState.waiting:
              {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            case ConnectionState.done:
              {
                if (noteData.hasData) {
                  return Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: ListView.builder(
                      itemCount: noteData.data?.length,
                      itemBuilder: (context, index) {
                        // String title = noteData.data![index]['title'];
                        String title = noteData.data![index].toString();

                        return Text(title);
                      },
                    ),
                  );
                } else {
                  return const Center(
                    child: Text("You don't have any notes yet,create one?"),
                  );
                }
              }

            default:
              return CircularProgressIndicator();
          }
        },
      ),

Explore more about

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