Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
使用Dart 2构建通用项目生成器_Dart_Flutter - Fatal编程技术网

使用Dart 2构建通用项目生成器

使用Dart 2构建通用项目生成器,dart,flutter,Dart,Flutter,我一直在使用Lime作者在一篇文章中提供的一些代码来构建分页的条目生成器。在切换到Dart 2之前,这一直运行得很好。我已经制作了一个关于这个问题的小演示。问题在于stats方法。使用Dart 1时,它很乐意接受贴图参数,但现在我只能使用dynamic使其工作。我还没有完全弄清楚原因,如果有人对泛型有更好的理解,能给我解释一下,我将不胜感激 颤振投掷: I/flutter (12798): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞══════════

我一直在使用Lime作者在一篇文章中提供的一些代码来构建分页的条目生成器。在切换到Dart 2之前,这一直运行得很好。我已经制作了一个关于这个问题的小演示。问题在于stats方法。使用Dart 1时,它很乐意接受贴图参数,但现在我只能使用dynamic使其工作。我还没有完全弄清楚原因,如果有人对泛型有更好的理解,能给我解释一下,我将不胜感激

颤振投掷:

I/flutter (12798): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (12798): The following assertion was thrown during performLayout():
I/flutter (12798): type '(Map<dynamic, dynamic>) => Widget' is not a subtype of type '(dynamic) => Widget'
I/flutter (12798): 
I/flutter (12798): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (12798): more information in this error message to help you determine and fix the underlying cause.
I/flutter (12798): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (12798):   https://github.com/flutter/flutter/issues/new
I/颤振(12798):══╡ 呈现库捕获到异常╞═════════════════════════════════════════════════════════
I/flatter(12798):在performLayout()期间抛出了以下断言:
I/flatter(12798):type'(Map)=>Widget'不是type'(dynamic)=>Widget'的子类型
I/颤振(12798):
I/flatter(12798):要么断言表明框架本身存在错误,要么我们应该提供
I/flatter(12798):此错误消息中的更多信息可帮助您确定和修复根本原因。
I/flatter(12798):无论哪种情况,请在GitHub上提交一个bug来报告这一断言:
I/颤振(12798):https://github.com/flutter/flutter/issues/new
代码如下:

import 'package:flutter/material.dart';

typedef Widget WidgetAdapter<T>(T t);

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Generic Type Example',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Generic Type Example', widgetAdapter: stats),
    );
  }
}

class MyHomePage<T> extends StatefulWidget {
  MyHomePage({Key key, this.title, this.widgetAdapter}) : super(key: key);

  final String title;
  final WidgetAdapter<T> widgetAdapter;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState<T> extends State<MyHomePage<T>> {
  List<T> data;

  Widget genericItemBuilder(BuildContext context, int index) {
    if (data == null) {
      data = fetchDataPage();
    }

    return widget.widgetAdapter(data[index]);
  }

  List<T> fetchDataPage() {
    List listOfMap = [{"A": "1"}, {"B": "2"}, {"C": "3"}, {"D": "4"}, {"E": "5"}];

    return listOfMap;
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new ListView.builder(
        itemBuilder: genericItemBuilder,
        itemCount: 5,
      ),
    );
  }
}

/// This used to work with Dart 1. Now, for it to work with Dart 2 I have to change it from Map to dynamic.
/// I don't understand why this is.
Widget stats(Map val) {
  return new Text(val.toString());
}
导入“包装:颤振/材料.省道”;
类型定义窗口小部件WidgetAdapter(T);
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“泛型类型示例”,
主题:新主题数据(
主样本:颜色。蓝色,
),
主页:新的MyHomePage(标题:“泛型类型示例”,widgetAdapter:stats),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key-Key,this.title,this.widgetAdapter}):超级(Key:Key);
最后的字符串标题;
最终WidgetAdapter WidgetAdapter;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
列出数据;
Widget genericItemBuilder(构建上下文,int索引){
如果(数据==null){
data=fetchDataPage();
}
返回widget.widgetAdapter(数据[索引]);
}
列表fetchDataPage(){
ListListOfMap=[{“A”:“1”},{“B”:“2”},{“C”:“3”},{“D”:“4”},{“E”:“5”}];
返回地图列表;
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:新建ListView.builder(
itemBuilder:genericItemBuilder,
物品计数:5,
),
);
}
}
///这通常用于Dart 1。现在,为了让它与Dart 2一起工作,我必须将它从Map更改为dynamic。
///我不明白这是为什么。
小部件统计(映射值){
返回新文本(val.toString());
}

问题在于您的
MyHomePage
\u MyHomePageState
都是通用的

但是您的
createState
根本没有指定任何类型。因此它默认为
dynamic
,而不是
Map


将您的
createState
更改为
\u MyHomePageState createState()=>new\u MyHomePageState()
应该可以解决这个问题。

我觉得这是个bug。您使用的是哪种颤振版本?请尝试
flatterchannelmaster
flatterdoctor
。谢谢。我使用的是v0.2.8(测试版)。我已切换到master,但仍然收到相同的错误。颤振医生显示:
[✓] 颤振(通道测试版,v0.2.8,Linux上,语言环境en_GB.UTF-8)[✓] Android工具链-为Android设备开发(Android SDK 27.0.3)[✓] Android Studio(3.1版)[✓] IntelliJ IDEA社区版(2018.1版)[✓] VS代码(版本1.22.2)[✓] 连接设备(1个可用)
谢谢你的建议。我已经尝试了一下,虽然我仍然得到一个错误,但我可能更接近于理解它:
类型'List'不是类型'List'的子类型,其中
对于
列表
事情,我会更改
列表地图=[{“a”:“1”},…
var-listOfMap=[{“A”:“1”},…
是的,但这不起作用。因为此函数无效。
t
可能不是
Map
。将其更改为
var-listOfMap=[{“A”:“1”},…
导致一个
元素类型“Map”无法分配给列表类型“t”。
错误。我想知道我是否以错误的方式处理此任务,但我真的很想理解为什么它与Dart 1而不是2一起工作。颤振几乎总是有Dart 2。不同的是,以前它不是“强模式”.现在是了。你所指的错误是真正的错误,即使没有强模式。不同的是,以前dart无法检测到它们。