【问题标题】:Flutter creating list of widgets from a list of strings and getting errorsFlutter 从字符串列表创建小部件列表并获取错误
【发布时间】:2020-05-26 03:13:43
【问题描述】:

我正在尝试将字符串列表转换为小部件列表,这些小部件是通过文本编辑/文本编辑控制器在前一个小部件中动态生成的。

我已将动态列表 names 拉入一个新的有状态小部件。

class NameMachine extends StatefulWidget {
  final List<String> names;

  NameMachine({Key key, @required this.names}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return _NameMachineState(names);
  }
}

class _NameMachineState extends State<NameMachine> {
  final List<String> names;
 @override
  Widget build(BuildContext context) {

然后我尝试创建一个小部件列表,但遇到了静态成员和初始化程序的问题。

final List<Widget> nameSlots = ...(names)
      .map(
        (names) => Container(
          padding: EdgeInsets.all(4.0),
          color: Colors.white,
          child: Text(
            names,
            textScaleFactor: 1.2,
            textAlign: TextAlign.center,
          ),
          width: double.infinity,
          height: double.infinity,
        ),
      )
      .toList();

【问题讨论】:

标签: flutter dart


【解决方案1】:

试试这个:

import "package:flutter/material.dart";

class NameMachine extends StatefulWidget {
  final List<String> names;

  NameMachine({Key key, @required this.names}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _NameMachineState();
}

class _NameMachineState extends State<NameMachine> {
 List<Widget> nameSlots;
 @override
 void initState(){
    super.initState();

    //the code below takes the argument passed to the constructor and 
    //map each item of the list to a Container widget and stores the result in nameSlots

    nameSlots = widget.names 
    .map(
    (names) => Container(
      padding: EdgeInsets.all(4.0),
      color: Colors.white,
      child: Text(
        names,
        textScaleFactor: 1.2,
        textAlign: TextAlign.center,
      ),
      width: double.infinity,
      height: double.infinity,
    ),
  )
  .toList();
 }
 @override
  Widget build(BuildContext context) {
        //some code
    }
}


我们在这里所做的是使用列表上的 map 方法,而不是列表中的每个项目(...(names) 获取列表中的每个项目)并将每个项目映射到一个小部件。

【讨论】:

  • 欢迎您。请接受答案,以便其他人也可以使用它!谢谢,
【解决方案2】:
class NameMachine extends StatefulWidget {
  final List<String> names;

  NameMachine({Key key, @required this.names}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _NameMachineState();
}

class _NameMachineState extends State<NameMachine> {
 List<Widget> names;
 @override
 void initState(){
    super.initState();
    names = widget.names
    .map(
    (names) => Container(
      padding: EdgeInsets.all(4.0),
      color: Colors.white,
      child: Text(
        names,
        textScaleFactor: 1.2,
        textAlign: TextAlign.center,
      ),
      width: double.infinity,
      height: double.infinity,
    ),
  )
  .toList();
 }
 @override
  Widget build(BuildContext context) {

my 中可能存在一些语法错误,但这可能会对您有所帮助。

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2020-12-29
    • 2014-02-10
    • 2016-02-13
    • 2020-04-21
    相关资源
    最近更新 更多