首页 > 解决方案 > 如何要求子小部件父级仅是 Flutter 中的特定小部件?

问题描述

是否可以强制某些小部件仅是某个特定小部件的子级,例如,我有 ChildWidget() 并且我希望此小部件仅是 Stack 的子级,否则如果此小部件的直接父级不是 Stack 则抛出编译时错误,例如未初始化/传递小部件的必需参数时?

期望的最终结果示例:

import 'package:flutter/material.dart';

class WidgetName extends StatelessWidget {
  const WidgetName({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Container(
          height: 50,
          width: 50,
          child: Placeholder()
        ),
        ChildWidget(), //Everything is okay, child's direct parent is Stack
        Container(
          height: 50,
          width: 50,
          child: ChildWidget(), // Compilation-time error (red underline), because direct ansector is Container, instead of Stack.
        ),
      ],
    );
  }
}

提前致谢!

标签: flutterdart

解决方案


这是所请求功能的实现。但是,如果有人知道如何重现编译时错误,则仅实现运行时错误,请分享您的解决方案,将不胜感激。

虽然visitAncestorElements方法相对昂贵 O(N),但我们返回 false 作为返回值,这意味着我们只检查第一个元素,时间复杂度降低到 O(1)。

context.visitAncestorElements((element) {
      assert(element.widget.runtimeType.toString().toLowerCase() != directAnsector.toLowerCase(),"Ansector Error");
      return false;
    });

推荐阅读