flutter 如何避免抖动中重码?

gopyfrb3  于 2023-04-07  发布在  Flutter
关注(0)|答案(2)|浏览(135)

例如,我有一个文件(first.dart),它有一个这样的代码:

@override
Widget build(BuildContext context) {
return Scaffold(
  body: Column(
    children: [
      Text('one'),
      Text('two'),
      Text('three'),
    ],
  ),
);
}

我有另一个文件(second.dart),它与第一个文件有类似的代码,但代码略有不同,如下所示:

@override
Widget build(BuildContext context) {
return Scaffold(
  body: Column(
    children: [
      Text('one'),
      Text('two'),
      Text('four'),
    ],
  ),
);
}

我不想有一个相同的代码使用两个地方,也许在未来有一个变化需要有我不想去两个文件,并改变他们都不是在一个地方改变,都得到改变,有什么想法,请?

t3irkdon

t3irkdon1#

构建Widget的“Flutter-Way”是通过实现子Widget并将不同的部分作为 prop 传递给它们。
在你的例子中,你可以将children数组作为List属性传递到一个包含scaffold和column的wrapper Widget中。作为替代,你可以直接将文本作为List属性传递,然后将数组Map到你的Text-Widgets,如果它们总是具有相同的布局,只是文本不同。
最后,如何详细地构建Widget树取决于您。始终尝试最小化复杂性并仅传递必要的 prop 。只要开始尝试,您仍然可以在以后对您的需求有更广泛的需求时优化代码。
如果我还不确定最终的结构,我通常会先将所有内容放入一个小部件中,然后在事情开始重复时将内容外包给Sub-Widget。
您还可以查找Flutter最佳实践,以进一步深入结构化代码的主题。

mutmk8jj

mutmk8jj2#

所以,是的,这是一个大问题。如果你不知道如何为每个屏幕定制中心文件,那么你必须编写重复的代码。
在这里,我将解释buttonWidget示例。

import 'package:flutter/material.dart';

class ButtonWidget extends StatefulHookConsumerWidget {
  final Widget buttonTitle;
  final Function onPressed;
  final ButtonStyle? style;
  const ButtonWidget(
      {required this.buttonTitle,
      required this.onPressed,
      this.style,
      Key? key})
      : super(key: key);

  @override
  ConsumerState<ConsumerStatefulWidget> createState() => _ButtonWidgetState();
}

class _ButtonWidgetState extends ConsumerState<ButtonWidget> {
  @override
  Widget build(BuildContext context) {
    return 
      child: ElevatedButton(
        onPressed: () async {
          await widget.onPressed();
        },
        style: widget.style ?? ButtonStyle(),
        child: widget.buttonTitle,
    );
  }
}

这里你怎么能叫这个

ButtonWidget(
        buttonTitle: Text('My title),
        onPressed: () async {/*do something*/}
),

ButtonWidget(
            buttonTitle: Text('My title),
            onPressed: () async {/*do something*/},
            style: ButtonStyle(...),
    ),

相关问题