Sempre me perguntam como criar Tabs dinamicamente. Neste código fiz um pequeno exemplo.

import 'package:flutter/material.dart';

class TesteTabs extends StatefulWidget {
  @override
  _TesteTabsState createState() => _TesteTabsState();
}

class _TesteTabsState extends State<TesteTabs>
    with TickerProviderStateMixin {
  TabController _tabController;

  int qtdeTabs = 2;

  @override
  void initState() {
    super.initState();

    _tabController = TabController(length: qtdeTabs, vsync: this);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Teste Tabs"),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.add),
            onPressed: _onClickAddTab,
          ),
          IconButton(
            icon: Icon(Icons.remove),
            onPressed: _onClickRemoveTab,
          )
        ],
        bottom: TabBar(
          controller: _tabController,
          tabs: getTabs(),
        ),
      ),
      body: TabBarView(
        controller: _tabController,
        children: getPages(),
      ),
    );
  }

  List<Widget> getTabs() {
    List<Widget> list = [];
    for (int i = 0; i < qtdeTabs; i++) {
      list.add(Tab(
        text: "Tab ${i + 1}",
      ));
    }
    return list;
  }

  List<Widget> getPages() {
    List<Widget> list = [];
    for (int i = 0; i < qtdeTabs; i++) {
      list.add(Container(
        child: Center(
          child: Text("Texto ${i + 1}"),
        ),
      ));
    }
    return list;
  }

  page(String text) {

  }

  void _onClickAddTab() {
    setState(() {
      qtdeTabs ++;

      _tabController = TabController(length: qtdeTabs, vsync: this);
    });
  }

  void _onClickRemoveTab() {
    setState(() {
      qtdeTabs --;

      _tabController = TabController(length: qtdeTabs, vsync: this);
    });
  }
}

 Resultado, você pode adicionar e remover as tabs com os ícones (+) e (-).