Martin Zhu
Martin Zhu

Reputation: 441

How to reuse the contents of the same widget in flutter?

I want to use the same instance of a widget in multiple places, changes in one place will be synchronized to another place.

But using the same instance in multiple places looks like multiple different instances.

So how can I achieve the feat?

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

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

I'm use flutter_inappbrowser.

Widget one and widget two use the same instance, but when I open the web page with widget one, widget two is unaffected.

I want widget one and widget two to be the same widget, that when widget one changes, widget two will also be affected.

Upvotes: 8

Views: 2520

Answers (1)

Anil Kumar
Anil Kumar

Reputation: 1984

create another class and return type like your required widget:

example related to my customButton i required in various classes:

 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);

}

Upvotes: 1

Related Questions