You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中无法将List内的TextEditingController传入Widget参数的报错咨询

Fix: "The instance member 'widget' can't be accessed in an initializer"

Hey there! Let's sort out this error you're facing. The root cause is straightforward: you can't access widget (or any instance member of your widget) directly in a class property initializer—initializers run before the widget's instance is fully set up, so widget isn't available yet when your _cardList is being created.

Here are three solid solutions to fix this:

Solution 1: Use late to delay initialization

With Dart's late keyword, you can tell the compiler that you'll initialize the property later (but before it's used), which lets you access widget during initialization:

class YourParentWidget extends StatefulWidget {
  final List<TextEditingController> controllers;

  const YourParentWidget({super.key, required this.controllers});

  @override
  State<YourParentWidget> createState() => _YourParentWidgetState();
}

class _YourParentWidgetState extends State<YourParentWidget> {
  // Use late to delay initialization until widget is available
  late final List<Widget> _cardList = [
    InputRefNomProduit(
      label: 'Référence',
      content: 'Taper la référence',
      label2: 'Nom du produit',
      content2: '',
      label3: 'Quantité',
      content3: 'Taper la quantité',
      label4: 'Prix',
      content4: 'Taper le prix unitaire',
      fieldController: widget.controllers.first,
      fieldController2: widget.controllers[1],
      fieldController3: widget.controllers[2],
      fieldController4: widget.controllers.last,
    ),
  ];

  @override
  Widget build(BuildContext context) {
    // Use _cardList in your UI here
    return Column(children: _cardList);
  }
}

Solution 2: Initialize in initState()

If you're working with a StatefulWidget, initState() runs after the widget instance is created, so widget is fully accessible here:

class _YourParentWidgetState extends State<YourParentWidget> {
  late List<Widget> _cardList;

  @override
  void initState() {
    super.initState();
    // Initialize _cardList here where widget is available
    _cardList = [
      InputRefNomProduit(
        label: 'Référence',
        content: 'Taper la référence',
        label2: 'Nom du produit',
        content2: '',
        label3: 'Quantité',
        content3: 'Taper la quantité',
        label4: 'Prix',
        content4: 'Taper le prix unitaire',
        fieldController: widget.controllers.first,
        fieldController2: widget.controllers[1],
        fieldController3: widget.controllers[2],
        fieldController4: widget.controllers.last,
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Column(children: _cardList);
  }
}

Solution 3: Use a getter property

If your _cardList doesn't need to be cached (or if you want it to automatically update when widget.controllers changes), use a getter instead of a stored property:

class _YourParentWidgetState extends State<YourParentWidget> {
  // Getter generates the list on each access
  List<Widget> get _cardList => [
    InputRefNomProduit(
      label: 'Référence',
      content: 'Taper la référence',
      label2: 'Nom du produit',
      content2: '',
      label3: 'Quantité',
      content3: 'Taper la quantité',
      label4: 'Prix',
      content4: 'Taper le prix unitaire',
      fieldController: widget.controllers.first,
      fieldController2: widget.controllers[1],
      fieldController3: widget.controllers[2],
      fieldController4: widget.controllers.last,
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Column(children: _cardList);
  }
}

Quick note on choosing:

  • Use Solution 1 if your list is fixed and won't change after initialization.
  • Use Solution 2 if you need to run additional setup logic alongside list initialization.
  • Use Solution 3 if your widget.controllers might change and you want the list to reflect those updates automatically.

内容的提问来源于stack exchange,提问作者LearningFlutterDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:49:09