如何在Flutter中重用同一小部件的内容?

8

我希望在多个地方使用同一个部件实例,对于一个地方所做的更改将同步到另一个地方。

但是在多个地方使用相同实例会看起来像多个不同的实例。

那么我该如何实现这一点呢?

  var test = InAppWebView(
    // ...
  );

  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        children: [
          test,  // widget one
          test,  // widget two
        ],
        controller: _pageController,
        physics: NeverScrollableScrollPhysics(),
        onPageChanged: onPageChanged,
      ),
     ),
    }

我正在使用flutter_inappbrowser

小部件1和小部件2使用相同的实例,但是当我在小部件1中打开网页时,小部件2不受影响。

我希望小部件1和小部件2是相同的小部件,即当小部件1更改时,小部件2也会受到影响。


这是可以通过StatefulWidget或某种控制器实现的。也许你应该问插件的维护者是否具有该功能。 - Martyns
为什么不使用官方的webview_flutter插件,它有一个控制器,你可以轻松地使用。我曾经使用过in app browser,但是当我想要构建IOS时遇到了问题。如果你想尝试,可以创建一个方法并传递相关参数,也许如果in app browser有“key”属性,你可以尝试使用相同的key(我不确定是否可以使用相同的key)。 - Blasanka
1个回答

1

创建另一个类和返回类型,类似于您所需的小部件:

例如,与我自定义按钮相关的内容在各个类中都是必需的:

 Widget customButton(title,context,ResponseCallback callBack,shadowColor) {
  return Container(
    margin: EdgeInsets.only(top: 20),
    height: 80,
    width: 150,
    decoration: BoxDecoration(
      color: Colors.blue,
      borderRadius: BorderRadius.circular(75),
      boxShadow: [
        BoxShadow(
          spreadRadius: 1,
          blurRadius: 4,
          offset: Offset(4, 3),
          color: shadowColor
        )
      ]
    ),
    child: FlatButton(
      onPressed: () {
        callBack(title);
      },
      child: Text(title,
          style: TextStyle(
              color: Colors.white,
              fontSize: 20,
              fontWeight: FontWeight.bold)),
    ),
  );
}

used:

child: customButton(
   comparedArray[index].category, context, buttonCallHandle,Colors.black),),



buttonCallHandle(e) {
dynamic instanceUpdated = instance.where((element) => element.category == e).toList();
Navigator.of(context).pushNamed('/choice', arguments: instanceUpdated);

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接