StreamBuilder <FileSystemEntity>(脏,状态:_StreamBuilderBaseState <FileSystemEntity,AsyncSnapshot <FileSystemEntity >>#25d1b)

时间:2020-07-23 10:20:20

标签: flutter dart stream-builder flutter-packages dart-stream

与Stream构建器一起使用时出现错误。 在我的代码中,我使用了if(snapshot.data != null) { list.add(snapshot.data); },但是我得到了一个msg,它在null上调用add。我什至添加了print('')语句来检查snapshot.data是否为空,但是它也可以与print()一起正常工作。因此,我根本不了解如何解决此错误。请有人回应。预先感谢。

这是我的代码

class Wrapper extends StatefulWidget {

  @override
  _WrapperState createState() => _WrapperState();
}

class _WrapperState extends State<Wrapper> {
  Stream<FileSystemEntity> mystream;
  var _directory;
  void getfilesdata() async
  {
    _directory = await getApplicationDocumentsDirectory();
    await Directory('${_directory.path}/data').create(recursive: true);

    mystream = Directory('${_directory.path}/data').list().map((data) => data);

    await Directory('${_directory.path}/documents').create(recursive: true);
  }
  @override
  void initState() {
    super.initState();
    getfilesdata();
  }
  @override
  Widget build(BuildContext context) {

    List<FileSystemEntity> alldata;

    return StreamBuilder<FileSystemEntity>(
      stream: mystream,
      builder: (context, snapshot) {
        if(!snapshot.hasData)
        {
          print('No data yet');
          return Loading();
        }
        else
          {
            if(snapshot.data != null && !snapshot.hasError)
            {
                print(snapshot.data);
                alldata.add(snapshot.data);
            }
            if(snapshot.connectionState==ConnectionState.done)
            {
              return HomeScreen(alldata: alldata);
            }
            else return Loading();
          }

      }
    );
  }
}

这是结果:

Performing hot restart...
Syncing files to device ZUK Z2132...
Restarted application in 1,734ms.
I/flutter (11840): No data yet
I/flutter (11840): No data yet
I/flutter (11840): File: '/data/user/0/com.example.easyscan/app_flutter/data/data[0]'

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building StreamBuilder<FileSystemEntity>(dirty, state: _StreamBuilderBaseState<FileSystemEntity, AsyncSnapshot<FileSystemEntity>>#25d1b):
The method 'add' was called on null.
Receiver: null
Tried calling: add(Instance of '_File')

The relevant error-causing widget was: 
  StreamBuilder<FileSystemEntity> file:///home/praneeth/AndroidStudioProjects/easyscan/lib/wrapper.dart:40:12
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      _WrapperState.build.<anonymous closure> (package:easyscan/wrapper.dart:53:25)
#2      StreamBuilder.build (package:flutter/src/widgets/async.dart:509:81)
#3      _StreamBuilderBaseState.build (package:flutter/src/widgets/async.dart:127:48)
#4      StatefulElement.build (package:flutter/src/widgets/framework.dart:4619:28)
...
════════════════════════════════════════════════════════════════════════════════════════════════════


1 个答案:

答案 0 :(得分:0)

您的错误是因为allData为空,所以您无法调用add()方法。 您可以声明变量,如下所示:

List<FileSystemEntity> alldata = [];

执行此操作allData将被初始化为一个空列表,您将可以调用其方法。