首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter 2: From List null safety使用mapIndex创建子行

Flutter 2: From List null safety使用mapIndex创建子行
EN

Stack Overflow用户
提问于 2021-08-31 15:18:22
回答 2查看 226关注 0票数 0

自从更新了空安全的颤动后,我对发生的事情一无所知。

我试图从一个孩子的列表中创建一排图标,但没有成功(这里的mapIndex不能使用,因为空的安全性(而在旧版本中它可以工作):

代码语言:javascript
复制
import 'package:flutter/material.dart';

class NavigationBar extends StatefulWidget {
  final List<Map<String, dynamic>>? icons;

  const NavigationBar({
    @required this.icons,
    Key? key
  }) : super(key: key);

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

class _NavigationBarState extends State<NavigationBar> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      height: 40,
      child: Row(
        children: widget.icons.mapIndex((i, icon) {return Container();})
      ),
    );
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-31 17:00:33

第一个问题是缺少集合导入(所以我不能使用mapIndex)

第二个是null的验证。我不知道这是不是更好的解决方案,但这里是我检查null值的版本:

代码语言:javascript
复制
import 'package:flutter/material.dart';

import 'package:collection/collection.dart';

class NavigationBar extends StatefulWidget {
  final List<Map<String, dynamic>>? icons;

  const NavigationBar({
    @required this.icons,
    Key? key
  }) : super(key: key);

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

class _NavigationBarState extends State<NavigationBar> {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Color.fromARGB(255, 12, 10, 10),
      width: double.infinity,
      height: 40,
      child: Row(
        children: widget.icons == null ? [] :
          widget.icons!.mapIndexed((index, element) =>
          IconButton(
            onPressed: () {},
            icon: widget.icons![0]['icon'],
            color: Colors.white,
          )).toList()
      ),
    );
  }
}
票数 0
EN

Stack Overflow用户

发布于 2021-08-31 15:33:14

对于null安全,首先检查变量是否为null。

代码语言:javascript
复制
widget.icons!.map((e) => Container(child: Text(e.keys.toString()),)).toList()

完整代码

代码语言:javascript
复制
import 'package:flutter/material.dart';
class NavigationBar extends StatefulWidget {
  final List<Map<String, dynamic>>? icons;

  const NavigationBar({
    @required this.icons,
    Key? key
  }) : super(key: key);

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

class _NavigationBarState extends State<NavigationBar> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      height: 40,
      child: Row(
          children: widget.icons!.map((e) => Container(child: Text(e.keys.toString()),)).toList()
      ),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69001294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档