You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter开发报NoSuchMethodError: method 'take' call of null错误求助

错误原因

你遇到的NoSuchMethodError: method 'take' call of null报错,核心原因是你自定义的generateWordPairs()方法是空实现,没有返回任何值,默认返回null,后续调用null.take(10)自然触发空指针调用异常。同时你的代码还有多处逻辑和依赖问题需要同步修复:

  1. 多余导入了仅web端可用的dart:html依赖,非web项目运行会报错
  2. 自定义的WordPair类是空实现,核心属性方法都没有返回有效值
  3. _buildRow方法中直接写死了字符串'pair.asPascalCase',没有读取变量实际值

修复步骤

步骤1:添加官方单词生成依赖

打开项目根目录的pubspec.yaml,在dependencies节点下新增依赖:

dependencies:
  flutter:
    sdk: flutter
  # 新增这行
  english_words: ^4.0.0

执行flutter pub get安装依赖。

步骤2:修改main.dart文件

删除首行多余的import 'dart:html';即可,其余代码无需改动。

步骤3:重写random_words.dart文件

完整修改后的代码如下:

import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

class RandomWords extends StatefulWidget {
  @override
  RandomWordsState createState() => RandomWordsState();
}

class RandomWordsState extends State<RandomWords>{
  final _randomWordPairs = <WordPair>[];
  final _savedWordPairs = <WordPair>[];
  Widget _buildList () {
    return ListView.builder(
      padding: const EdgeInsets.all(16),
      itemBuilder: (context,item){
        if(item.isOdd) return Divider();
        final index = item ~/ 2;
        if(index>=_randomWordPairs.length){
          _randomWordPairs.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_randomWordPairs[index]);
      }
    );
  }
  Widget _buildRow(WordPair pair){
    final alreadySaved = _savedWordPairs.contains(pair);
    return ListTile(
      title: Text(pair.asPascalCase, style: TextStyle(fontSize: 18.0),),
      trailing: Icon(
        alreadySaved ? Icons.favorite : Icons.favorite_border,
        color: alreadySaved ? Colors.red : null
      ),
      onTap: (){
        setState(() {
          if(alreadySaved){
            _savedWordPairs.remove(pair);
          }else{
            _savedWordPairs.add(pair);
          }
        });
      },
    );
  }
  void _pushSaved() {
    Navigator.of(context).push(
      MaterialPageRoute(builder:(BuildContext context){
        final Iterable<ListTile> tiles = _savedWordPairs.map((WordPair pair){
          return ListTile(
            title: Text(pair.asPascalCase, style: TextStyle(fontSize: 16.0),),
          );
        }); 
        final List<Widget> divided = ListTile.divideTiles(
          context: context,
          tiles: tiles
        ).toList();
        return Scaffold(
          appBar: AppBar(title: Text('Saved WordPairs')),
          body: ListView(children: divided)
        );
      })
    );
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WordPair Generator'),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.list),
            onPressed: _pushSaved
          )
        ],
      ),
      body: _buildList()
    );
  }
}

修改后重新运行项目即可正常实现单词对生成、收藏/取消收藏、收藏列表查看功能。

内容的提问来源于stack exchange,提问作者NJ9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 01:45:03