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

Flutter将列表索引传入Stateful Widget加载PDF时遇索引未识别问题

问题分析与解决办法

嘿,我一眼就发现问题所在啦!你在State类_MyDetailsPage里直接用index是行不通的——因为这个index是定义在父类DetailsPage(也就是你的StatefulWidget)里的成员变量,State类想要访问它,必须通过widget.index这个方式才行。

具体修改步骤:

  • 在loadDocument方法里,把locations[index].Booklink改成locations[widget.index].Booklink,这样就能正确获取到传递过来的索引值了。

修改后的关键代码片段:

loadDocument() async {
  document = await PDFDocument.fromURL(locations[widget.index].Booklink);
  setState(() => _isLoading = false);
}

额外小建议:

你可以把locations这个列表移到DetailsPage类外面(作为全局常量),或者定义成static变量,这样就不用每次创建_MyDetailsPage实例都重新初始化一遍这个列表啦,比如:

// 把列表移到类外面
List locations = [
  Books(
      name: 'book name 1',
      Booklink: 'https://storage.googleapis.com/school_books/Class9/ban/Bangla%20Sahitto.pdf'),
  Books(
      name: 'book name 2',
      Booklink: 'https://storage.googleapis.com/school_books/Class9/ban/Bangla%20Sahitto.pdf')
];

class DetailsPage extends Stateful Widget {
  final int index;
  DetailsPage(this.index);
  @override
  _MyDetailsPage createState() => _MyDetailsPage();
}

class _MyDetailsPage extends State<DetailsPage> {
  bool _isLoading = true;
  PDFDocument document;
  @override
  void initState() {
    super.initState();
    loadDocument();
  }
  
  loadDocument() async {
    document = await PDFDocument.fromURL(locations[widget.index].Booklink);
    setState(() => _isLoading = false);
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: _isLoading ? Center(child: CircularProgressIndicator()) : PDFViewer(
            document: document,
            zoomSteps: 1,
          ),
        ),
      ),
    );
  }
}

为什么会出现这个问题?

Flutter的StatefulWidget和它对应的State是两个独立的类,State类通过widget属性持有对应的StatefulWidget实例的引用,所以必须通过widget.成员变量名的方式才能访问到StatefulWidget里定义的变量,直接写变量名是找不到的哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:28:58