Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在构建选项卡时抛出NoSuchMethodError(脏,状态:#TabsState#fefcf):方法';[]和#x27;被调用为空_Flutter_Dart_Flutter Layout_Dart Html - Fatal编程技术网

Flutter 在构建选项卡时抛出NoSuchMethodError(脏,状态:#TabsState#fefcf):方法';[]和#x27;被调用为空

Flutter 在构建选项卡时抛出NoSuchMethodError(脏,状态:#TabsState#fefcf):方法';[]和#x27;被调用为空,flutter,dart,flutter-layout,dart-html,Flutter,Dart,Flutter Layout,Dart Html,对于这类错误,我已经阅读了类似的答案,但仍然无法在代码中解决它 当我点击该按钮时,它会显示一段时间的错误屏幕,然后显示loader,在提取数据时应该显示loader 代码如下: import 'package:flutter/material.dart'; import 'Dictionary.dart'; import 'Services.dart'; class NewTab extends StatefulWidget { @override _NewTabState cr

对于这类错误,我已经阅读了类似的答案,但仍然无法在代码中解决它

当我点击该按钮时,它会显示一段时间的错误屏幕,然后显示loader,在提取数据时应该显示loader

代码如下:

import 'package:flutter/material.dart';
import 'Dictionary.dart';
import 'Services.dart';

class NewTab extends StatefulWidget {
  @override
  _NewTabState createState() => _NewTabState();
}

class _NewTabState extends State<NewTab> {
  List<Dictionary> _users;
  int len;
 @override
 void initState() { 
   super.initState();
    Services.getUsers().then((users) {
      setState(() {
        _users = users;
        len = users.length - 1 ; 
      });
    });
 }
  @override
  Widget build(BuildContext context) {
     Dictionary user = _users[len];
    print(user);
     return FutureBuilder(
                future: Services.getUsers(),
                builder: (context,AsyncSnapshot<List<Dictionary>> snapshot){
                  if(snapshot.data==null){
                    return Center(child: CircularProgressIndicator());
                  }else{
                        return  DefaultTabController(length: 2, 
                        child:Scaffold(
                          appBar: AppBar(
                            title : Text('Meaning',
                            style: TextStyle(
                                fontFamily: "Pangolin",
                                fontSize: 35,
                              )
                            ),
                            centerTitle: true,
                            bottom: TabBar(
                                  tabs: <Widget>[
                                    Tab(text:'Meaning',
                                        icon: Icon(Icons.book_outlined),
                                        ),
                                    Tab(text:'Example',
                                        icon: Icon(Icons.directions_transit)
                                        ),
                                  ],
                                ),
                          ),
                          
                          body : TabBarView(
                                children: <Widget>[
                                  Container(
                                    color: Colors.white,
                                    child: Container(
                                    color: Colors.black,
                                    child: ListView.builder(
                                      itemCount: user.meanings.length,
                                      itemBuilder: (context, index) {
                                        print(index);
                                        List<Meaning> mean = user.meanings;
                                        return ListTile(
                                          title: Text(mean[index].definitions[0].definition
                                          , style: TextStyle(
                                            color: Colors.white,
                                            ),
                                          ),
                                        );
                                      },
                                    ),
                                  ),),Container(
                child: Text('home'),
              ),]
              )
                        )
                        );
                  }
       }, 
     );
  }
}
服务代码.dart

import 'package:http/http.dart' as http;
import 'Dictionary.dart';
import 'package:dictionary_app/home.dart';
import 'dart:async';

class Services {
  
  static final  url = 'https://api.dictionaryapi.dev/api/v2/entries/en_US/$word';
 
  static Future<List<Dictionary>> getUsers() async {
      
    try {
      print(url);
      final response = await http.get(Uri.parse(url));
      print(response.statusCode);
      if (200 == response.statusCode) {
         final List<Dictionary> users = dictionaryFromJson(response.body);
        return users;
      } 
      else {
        return <Dictionary>[];
      }
    } catch (e) {
      return <Dictionary>[];
    }
  }
}

首先,您可以删除
initState
方法,因为您已经在使用
FutureBuilder
获取
服务。getUsers()

现在,您已经像这样定义了变量

List<Dictionary> _users;
int len;
else {
  Dictionary user = snapshot.data!.last; // This gives you the last element of the array
因为,
\u用户
在第一次调用
build
时为空。所以,去掉这两条线

现在,剩下的代码是正确的,除了一部分

else
if(snapshot.data==null)
案例中,定义
user
变量如下:

List<Dictionary> _users;
int len;
else {
  Dictionary user = snapshot.data!.last; // This gives you the last element of the array
现在,您的代码应该可以工作了。
以下是有关
\u NewTabState

的完整代码的详细信息,您必须初始化列表

List<Dictionary> _users = [];
List<Dictionary> _users = [];
snapShot.connectionState == ConnectionState.waiting ? :