Search code examples
flutterflutter-layoutflutter-animationflutter-webvisual-web-developer

Tabbar view for my flutter app is not working


This is my code. Changing tabbar view contents is not changing the contents.

I've tried changing the children of tabbar view to text but still no effect

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
        backgroundColor: Colors.white,
        body: SafeArea(
          child: Column(
            children: <Widget>[
              Container(
                height: 60,
                width: 500,
                color: Colors.teal,
                margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
                padding: EdgeInsets.fromLTRB(10, 0, 0, 0),
                child: Text(
                  'Choose Your Topic',
                  textAlign: TextAlign.left,
                  style: TextStyle(
                    fontFamily: 'BalooBhaina2-Regular',
                    fontWeight: FontWeight.normal,
                    fontSize: 35,
                    letterSpacing: 0.5,
                    wordSpacing: 2.0,
                    shadows: [
                      Shadow(
                        blurRadius: 50.0,
                        color: Colors.black,
                        offset: Offset(5.0, 5.0),
                      ),
                    ],
                  ),
                ),
              ),
              Container(
                height: 50,
                width: 800,
                margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
                child: DefaultTabController(
                  length: 4,
                  child: Scaffold(
                    appBar: AppBar(
                      bottom: TabBar(tabs: [
                        Tab(icon: Icon(Icons.touch_app)),
                        Tab(icon: Icon(Icons.directions_bike)),
                        Tab(icon: Icon(Icons.movie)),
                        Tab(icon: Icon(Icons.music_video)),
                      ]),
                    ),
                    body: TabBarView(
                      children: [
                        Icon(Icons.touch_app),
                        Icon(Icons.directions_bike),
                        Icon(Icons.movie),
                        Icon(Icons.music_video),
                      ],
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Solution

  • You can copy paste run full code below
    Step 1: You do not need Scaffold and Appbar
    Step 2: You can wrap TabBar and TabBarView with Container

    code snippet

    Container(
        color: Colors.blue,
        height: 50,
        width: 800,
        margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
        child: TabBar(controller: _tabController, tabs: [
          Tab(icon: Icon(Icons.touch_app)),
          Tab(icon: Icon(Icons.directions_bike)),
          Tab(icon: Icon(Icons.movie)),
          Tab(icon: Icon(Icons.music_video)),
        ]),
      ),
      Expanded(
        child: Container(
          //height: 50,
          //width: 800,
          margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
          child: TabBarView(
            controller: _tabController,
            children: [
              Icon(Icons.touch_app),
    

    working demo

    enter image description here

    full code

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
      TabController _tabController;
    
      @override
      void initState() {
        super.initState();
        _tabController = TabController(vsync: this, length: 4);
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Material App',
          home: Scaffold(
            backgroundColor: Colors.white,
            body: SafeArea(
              child: Column(
                children: <Widget>[
                  Container(
                    height: 60,
                    width: 500,
                    color: Colors.teal,
                    margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
                    padding: EdgeInsets.fromLTRB(10, 0, 0, 0),
                    child: Text(
                      'Choose Your Topic',
                      textAlign: TextAlign.left,
                      style: TextStyle(
                        fontFamily: 'BalooBhaina2-Regular',
                        fontWeight: FontWeight.normal,
                        fontSize: 35,
                        letterSpacing: 0.5,
                        wordSpacing: 2.0,
                        shadows: [
                          Shadow(
                            blurRadius: 50.0,
                            color: Colors.black,
                            offset: Offset(5.0, 5.0),
                          ),
                        ],
                      ),
                    ),
                  ),
                  Container(
                    color: Colors.blue,
                    height: 50,
                    width: 800,
                    margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
                    child: TabBar(controller: _tabController, tabs: [
                      Tab(icon: Icon(Icons.touch_app)),
                      Tab(icon: Icon(Icons.directions_bike)),
                      Tab(icon: Icon(Icons.movie)),
                      Tab(icon: Icon(Icons.music_video)),
                    ]),
                  ),
                  Expanded(
                    child: Container(
                      //height: 50,
                      //width: 800,
                      margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
                      child: TabBarView(
                        controller: _tabController,
                        children: [
                          Icon(Icons.touch_app),
                          Icon(Icons.directions_bike),
                          Icon(Icons.movie),
                          Icon(Icons.music_video),
                        ],
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }