gpt4 book ai didi

flutter - 将步进器中的步骤分为不同的文件

转载 作者:行者123 更新时间:2023-12-03 03:48:16 25 4
gpt4 key购买 nike

我尝试使每个步骤都在另一个dart文件中。 (步骤包含很多代码,很难将其维护在单个文件中)
有什么想法?

  • 使用Scaffold(父窗口小部件)创建stepper
  • 父窗口小部件创建一个步骤实例,每个实例修改相同的模型(类的对象)
  • 父窗口小部件可以在每个步骤上调用isValid()方法。 (如果有效,我们可以切换到下一步)

  • 要求:
  • 步骤可能是StatefulWidgetStatelessWidget(可能很难实现,所以StatefulWidget就足够了)
  • 每个步骤都应包含bool isValid()方法。

  • 是)我有的? - 几乎没有
    abstract class ValidatedStep {
    bool isValid();
    }
    并参见下面的 Step,我们将此 abstract class实现为 Step1,但是此方法应询问 state是否有效。从 StatefulWidget中,我们无法访问状态。
    class Step1 extends StatefulWidget implements ValidatedStep {
    //its ok to create it here?
    final _Step1State state = _Step1State();

    @override
    _Step1State createState() {
    //we could (and should?) create state here, but variables in this widget should be final
    return state;
    }

    @override
    bool isValid() {
    return state.isValid();
    }
    }

    class _Step1State extends State<Step1> implements ValidatedStep {
    @override
    Widget build(BuildContext context) {
    return Container();
    }

    @override
    bool isValid() {
    return true;
    }
    }

    最佳答案

    您可以使用map。这是我的代码的修改示例。也许您可以修改以添加功能以验证步骤。
    您可以简单地将列表中来自不同文件的不同Widget放入。

    class StepperScreen extends StatelessWidget {
    final List<SomeClass> list;
    StepperScreen({@required this.list});

    @override
    Widget build(BuildContext context) {
    return SafeArea(
    child: Scaffold(
    appBar: AppBar(
    title: Text(
    'Stepper Screen',
    ),
    ),
    body: Stepper(
    steps: getStep(list),
    ),
    ),
    );
    }
    }

    List<Step> getStep(List<SomeClass> list) {
    return list
    .map(
    (e) => Step(
    title: Text(
    e.name,
    style: TextStyle(fontSize: 20),
    ),
    content: e.child,
    ),
    )
    .toList();
    }

    当然,您的SomeClass应该具有以下属性:
    class SomeClass {
    String name;
    Widget child;

    SomeClass({@required this.name, @required this.child});

    }

    关于flutter - 将步进器中的步骤分为不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64733620/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com