Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
Android 类型';未来<;动态>';不是类型为';列表<;应用程序>';_Android_Flutter_Flutter Dependencies - Fatal编程技术网

Android 类型';未来<;动态>';不是类型为';列表<;应用程序>';

Android 类型';未来<;动态>';不是类型为';列表<;应用程序>';,android,flutter,flutter-dependencies,Android,Flutter,Flutter Dependencies,我正在尝试在flatter中创建一个搜索小部件,用于我使用device_apps()使用的应用程序列表。但是我得到一个错误“类型‘Future’不是类型‘List?’的子类型”。为了创建搜索小部件,我使用了来自的帮助 这是我的密码: import 'dart:async'; import 'package:device_apps/device_apps.dart'; import 'package:flutter/material.dart'; class SearchWidget ext

我正在尝试在flatter中创建一个搜索小部件,用于我使用device_apps()使用的应用程序列表。但是我得到一个错误“类型‘Future’不是类型‘List?’的子类型”。为了创建搜索小部件,我使用了来自的帮助

这是我的密码:

import 'dart:async';

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


class SearchWidget extends StatelessWidget {
  SearchWidget({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          TextField(onChanged: _filter),
          StreamBuilder<List<Application>>(
            initialData: lelist(),
            stream: _stream,
            builder:
                    (BuildContext context, AsyncSnapshot<List<Application>> snapshot) {
                  print(snapshot.data);
                  return ListView.builder(
                    shrinkWrap: true,
                    itemCount: snapshot.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      return Text(snapshot.data[index].appName);
                    },
                  );
                },
              )


        ],
      ),
    );
  }
}

StreamController<List<Application>> _streamController = StreamController<List<Application>>();
Stream<List<Application>> get _stream => _streamController.stream;
_filter(String searchQuery) {
  List<Application> _filteredList = lelist()
      .where((Application app) => app.appName.toLowerCase().contains(searchQuery.toLowerCase()))
      .toList();
  _streamController.sink.add(_filteredList);
}

lelist() async {
  List<Application> _dataFromQuerySnapShot = await DeviceApps.getInstalledApplications(includeAppIcons: true);
  _dataFromQuerySnapShot.sort((a, b) {
    return a.appName.toString().toLowerCase().compareTo(b.appName.toString().toLowerCase());
  });
  return _dataFromQuerySnapShot;
}



导入'dart:async';
导入“包:设备应用程序/设备应用程序.dart”;
进口“包装:颤振/材料.省道”;
类SearchWidget扩展了无状态Widget{
SearchWidget({Key}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回SingleChildScrollView(
子:列(
儿童:[
文本字段(一旦更改:_过滤器),
StreamBuilder(
initialData:lelist(),
溪流:_溪流,
建设者:
(BuildContext上下文,异步快照){
打印(快照数据);
返回ListView.builder(
收缩膜:对,
itemCount:snapshot.data.length,
itemBuilder:(构建上下文,int索引){
返回文本(snapshot.data[index].appName);
},
);
},
)
],
),
);
}
}
StreamController _StreamController=StreamController();
Stream get _Stream=>_streamController.Stream;
_过滤器(字符串搜索查询){
列表_filteredList=lelist()
.where((应用程序app)=>app.appName.toLowerCase().contains(searchQuery.toLowerCase())
.toList();
_streamController.sink.add(_filteredList);
}
lelist()异步{
列表_dataFromQuerySnapShot=Wait DeviceApps.GetInstalledApplication(包括应用图标:true);
_dataFromQuerySnapShot.sort((a,b){
返回a.appName.toString().toLowerCase().compareTo(b.appName.toString().toLowerCase());
});
从QuerySnapshot返回_数据;
}

我想你需要在给未来打电话后添加asList

lelist() async {
 List<Application> _dataFromQuerySnapShot = await 
   DeviceApps.getInstalledApplications(includeAppIcons: true);
    _dataFromQuerySnapShot.sort((a, b) {
    return 
    a.appName.toString().toLowerCase().compareTo(b.appName.toString().toLowerCase());
 }) as List;
 return _dataFromQuerySnapShot;
lelist()异步{
列表_dataFromQuerySnapShot=wait
DeviceApps.GetInstalledApplication(包括应用图标:true);
_dataFromQuerySnapShot.sort((a,b){
返回
a、 appName.toString().toLowerCase().compareTo(b.appName.toString().toLowerCase());
})as列表;
从QuerySnapshot返回_数据;

}

我认为没有必要在每次击键时加载和排序已安装的应用程序,从而将所有这些逻辑置于初始状态。这也使您的
\u过滤器
功能同步

import 'dart:async';

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

class SearchWidget extends StatefulWidget {
  SearchWidget({Key key}) : super(key: key);

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

class _SearchWidgetState extends State<SearchWidget> {
  final _streamController = StreamController<List<Application>>();
  List<Application> _dataFromQuerySnapShot;

  Stream<List<Application>> get _stream => _streamController.stream;

  @override
  void initState() {
    DeviceApps.getInstalledApplications(includeAppIcons: true)
        .then((List<Application> apps) {
      _dataFromQuerySnapShot = apps;
      _dataFromQuerySnapShot.sort((a, b) {
        return a.appName
            .toString()
            .toLowerCase()
            .compareTo(b.appName.toString().toLowerCase());
      });
      _streamController.sink.add(_dataFromQuerySnapShot);
    });
    super.initState();
  }

  @override
  void dispose() {
    _streamController.close();
    super.dispose();
  }

  _filter(String searchQuery) {
    final filteredApplications = _dataFromQuerySnapShot
        .where((Application app) =>
            app.appName.toLowerCase().contains(searchQuery.toLowerCase()))
        .toList();
    _streamController.sink.add(filteredApplications);
  }

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          TextField(onChanged: _filter),
          StreamBuilder<List<Application>>(
            stream: _stream,
            builder: (BuildContext context,
                AsyncSnapshot<List<Application>> snapshot) {
              if (!snapshot.hasData) {
                return Center(child: CircularProgressIndicator());
              }
              return snapshot.data.isEmpty
                  ? Center(child: Text('Empty'))
                  : ListView.builder(
                      shrinkWrap: true,
                      itemCount: snapshot.data.length,
                      itemBuilder: (BuildContext context, int index) {
                        return Text(snapshot.data[index].appName);
                      },
                    );
            },
          )
        ],
      ),
    );
  }
}
导入'dart:async';
导入“包:设备应用程序/设备应用程序.dart”;
进口“包装:颤振/材料.省道”;
类SearchWidget扩展了StatefulWidget{
SearchWidget({Key}):超级(Key:Key);
@凌驾
_SearchWidgetState createState()=>\u SearchWidgetState();
}
类_SearchWidgetState扩展状态{
最终_streamController=streamController();
列表\u来自QuerySnapshot的数据;
Stream get _Stream=>_streamController.Stream;
@凌驾
void initState(){
DeviceApps.GetInstalledApplication(包括应用图标:true)
.然后((列出应用程序){
_dataFromQuerySnapShot=应用程序;
_dataFromQuerySnapShot.sort((a,b){
返回a.appName
.toString()
.toLowerCase()
.compareTo(b.appName.toString().toLowerCase());
});
_streamController.sink.add(_dataFromQuerySnapShot);
});
super.initState();
}
@凌驾
无效处置(){
_streamController.close();
super.dispose();
}
_过滤器(字符串搜索查询){
最终筛选应用程序=\u来自QuerySnapshot的数据
.其中((应用程序应用程序)=>
app.appName.toLowerCase().contains(searchQuery.toLowerCase())
.toList();
_streamController.sink.add(filteredApplications);
}
@凌驾
小部件构建(构建上下文){
返回SingleChildScrollView(
子:列(
儿童:[
文本字段(一旦更改:_过滤器),
StreamBuilder(
溪流:_溪流,
生成器:(BuildContext上下文,
异步快照(快照){
如果(!snapshot.hasData){
返回中心(子项:CircularProgressIndicator());
}
返回snapshot.data.isEmpty
?居中(子项:文本('Empty'))
:ListView.builder(
收缩膜:对,
itemCount:snapshot.data.length,
itemBuilder:(构建上下文,int索引){
返回文本(snapshot.data[index].appName);
},
);
},
)
],
),
);
}
}

我尝试过,但出现了错误:“参数类型‘Future’无法分配给参数类型‘List’”。您不能使用
lelist()
作为初始数据的值,因为它返回的是Future。为initialData提供不同的值,或者将其删除,并在等待流中的第一个值时使用类似于
if(!snapshot.hasData){return CircularProgressIndicator()}
的内容。首先感谢您的回复,我在一个拼贴项目中工作,并在这方面停留了好几天。我删除了初始数据并使用了CircularProgressIndicator()…但现在正在打印(snapshot.data)我得到了I/flatter(26265):null,循环指示器正在旋转,没有显示任何列表。。。。。。当我在文本字段中输入单词时,控制台中出现了另一个错误:未处理的异常:类型“Future”不是类型“List”的子类型我尝试使用initialData:lelist()作为List,但它显示了相同的错误:“Future”不是类型castNo中类型“List”的子类型,即使使用as List,仍然会出现相同的错误。