Can I use a TabBar and TabBarView as an in page widget?

前端 未结 2 692
不知归路
不知归路 2020-12-28 19:10

In course of my exploration of the flutter framework I came across a problem, I didn\'t know how to solve. Can I use TabBar in combination with TabBarView as a child of othe

相关标签:
2条回答
  • 2020-12-28 19:23

    Turns out it works. This is the relevant code snippet:

    new Container(
      decoration: new BoxDecoration(color: Theme.of(context).primaryColor),
      child: new TabBar(
        controller: _controller,
        tabs: [
          new Tab(
            icon: const Icon(Icons.home),
            text: 'Address',
          ),
          new Tab(
            icon: const Icon(Icons.my_location),
            text: 'Location',
          ),
        ],
      ),
    ),
    new Container(
      height: 80.0,
      child: new TabBarView(
        controller: _controller,
        children: <Widget>[
          new Card(
            child: new ListTile(
              leading: const Icon(Icons.home),
              title: new TextField(
                decoration: const InputDecoration(hintText: 'Search for address...'),
              ),
            ),
          ),
          new Card(
            child: new ListTile(
              leading: const Icon(Icons.location_on),
              title: new Text('Latitude: 48.09342\nLongitude: 11.23403'),
              trailing: new IconButton(icon: const Icon(Icons.my_location), onPressed: () {}),
            ),
          ),
        ],
      ),
    ),
    

    And this is a working example:

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          title: 'Flutter Demo',
          home: new MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => new _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
      TabController _controller;
    
      @override
      void initState() {
        super.initState();
        _controller = new TabController(length: 2, vsync: this);
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text('TestProject'),
          ),
          body: new ListView(
            children: <Widget>[
              new Card(
                child: new ListTile(
                  title: const Text('Some information'),
                ),
              ),
              new Container(
                decoration: new BoxDecoration(color: Theme.of(context).primaryColor),
                child: new TabBar(
                  controller: _controller,
                  tabs: [
                    new Tab(
                      icon: const Icon(Icons.home),
                      text: 'Address',
                    ),
                    new Tab(
                      icon: const Icon(Icons.my_location),
                      text: 'Location',
                    ),
                  ],
                ),
              ),
              new Container(
                height: 80.0,
                child: new TabBarView(
                  controller: _controller,
                  children: <Widget>[
                    new Card(
                      child: new ListTile(
                        leading: const Icon(Icons.home),
                        title: new TextField(
                          decoration: const InputDecoration(hintText: 'Search for address...'),
                        ),
                      ),
                    ),
                    new Card(
                      child: new ListTile(
                        leading: const Icon(Icons.location_on),
                        title: new Text('Latitude: 48.09342\nLongitude: 11.23403'),
                        trailing: new IconButton(icon: const Icon(Icons.my_location), onPressed: () {}),
                      ),
                    ),
                  ],
                ),
              ),
              new Card(
                child: new ListTile(
                  title: const Text('Some more information'),
                ),
              ),
              new RaisedButton(
                color: Theme.of(context).primaryColor,
                onPressed: () {},
                child: const Text(
                  'Search for POIs',
                  style: const TextStyle(color: Colors.white),
                ),
              ),
            ],
          ),
        );
      }
    }
    
    0 讨论(0)
  • 2020-12-28 19:23

    If you have variable height in TabBarView, you can use Expanded.

    body:
        ...
        new Expanded(
            child: new TabBarView(
              controller: _controller,
              children: <Widget>[
                new Card(
                  child: new ListTile(
                    leading: const Icon(Icons.home),
                    title: new TextField(
                      decoration: const InputDecoration(hintText: 'Search for address...'),
                    ),
                  ),
                ),//Card
                .... 
                ....
              ],//Widget
            ),//TabBarView
          ),//Expanded
    
    0 讨论(0)
提交回复
热议问题