首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法'findRenderObject‘被调用为null

方法'findRenderObject‘被调用为null
EN

Stack Overflow用户
提问于 2020-10-29 10:49:51
回答 1查看 1.4K关注 0票数 0
代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  ScrollController _sTabController;
  List<GlobalKey> keyList = <GlobalKey>[];

  @override
  void initState() {
    keyList.clear();
    _sTabController = ScrollController();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      readyOfWidget();
    });
    for (int i = 0; i < 25; i++) {
      keyList.add(GlobalKey(debugLabel: 'item_$i'));
    }
    super.initState();
  }

  void readyOfWidget() {
    for (int i = 0; i < keyList.length; i++) {
        RenderBox tabKeyItemRenderBox =
        keyList[i].currentContext.findRenderObject();
        if (tabKeyItemRenderBox != null) {
          Offset positionOfRenderBox =
          tabKeyItemRenderBox.localToGlobal(Offset.zero);
          print('keyItemRenderBox dx {$i}: ${positionOfRenderBox.dx}');
        }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(
        // height: 60,
        child: ListView(
          controller: _sTabController,
          shrinkWrap: true,
          scrollDirection: Axis.horizontal,
          children: List.generate(keyList.length, (index) {
            return Wrap(
              children: [
                Container(
                  key: keyList.elementAt(index),
                  color: index % 2 == 0 ? Colors.red : Colors.green,
                  child: Padding(
                      padding: EdgeInsets.only(top: 10,bottom: 10,left: 40,right: 40),
                      child: Text(
                        'Text $index',
                        style: TextStyle(fontSize: 21),
                      )),
                )
              ],
            );
          }),
        ),
      ),
    );
  }
}

输出

I/颤振( 5864):keyItemRenderBox dx {0}:0.0

I/颤振( 5864):keyItemRenderBox dx {1}:77.0

I/颤振( 5864):keyItemRenderBox dx {2}:154.0

I/颤振( 5864):keyItemRenderBox dx {3}:231.0

I/颤振( 5864):keyItemRenderBox dx {4}:308.0

I/颤振( 5864):keyItemRenderBox dx {5}:385.0

I/颤振( 5864):keyItemRenderBox dx {6}:462.0

I/颤振( 5864):keyItemRenderBox dx {7}:539.0

I/颤振( 5864):keyItemRenderBox dx {8}:616.0

调度程序库═════════════════════════════════════════════════════捕获的════════异常

方法'findRenderObject‘被调用为null。

接收器:空

尝试调用: findRenderObject()

════════════════════════════════════════════════════════════════════════════════════════════════════

也是当你试着用下面的方法

代码语言:javascript
复制
padding: EdgeInsets.only(top: 10,bottom: 10,left: 40,right: 40),

输出

I/颤振( 7007):keyItemRenderBox dx {0}:0.0

I/颤振( 7007):keyItemRenderBox dx {1}:137.0

I/颤振( 7007):keyItemRenderBox dx {2}:274.0

I/颤振( 7007):keyItemRenderBox dx {3}:411.0

I/颤振( 7007):keyItemRenderBox dx {4}:548.0

调度程序库═════════════════════════════════════════════════════捕获的════════异常

方法'findRenderObject‘被调用为null。

接收器:空

尝试调用: findRenderObject()

════════════════════════════════════════════════════════════════════════════════════════════════════

是否有可能获取所有水平列表项的findRenderObject()?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 11:45:50

之所以发生这种情况,是因为尚未呈现项目(第9项)。ListView执行延迟呈现。

因此,如果您想要实现这一点,您需要您的"SingleChildScrollView“与轴线为"Axis.horizontal”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64589604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档