Pakete, Repositories und App-Kategorien suchen

Paketdetailsv2.0.1

mobile_sidebar

Eine responsive Seitenleiste für Flutter, die dem Material Design folgt

30-Tage-Downloads
27
Likes
31
Pub-Punkte
40

Paket installieren

flutter pub add mobile_sidebar

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Ein responsive Sidebar für Flutter, das den Material Design-Richtlinien folgt. Passt den Layout dynamisch an die Bildschirmgröße an und bietet eine optimale Navigationserfahrung über verschiedene Geräte hinweg. Ideal für Apps, die eine konsistente und zugängliche Navigation erfordern, unterstützt sowohl mobile als auch Desktop-Layouts mit reibungslosen Übergängen. Das Paket vereinfacht die Implementierung von einblendbaren Sidebars, ohne die Designtreue oder Benutzerfreundlichkeit zu beeinträchtigen.

Anwendungsfälle

  • Mobile und Desktop-App-Navigation
  • Reaktive Benutzeroberfläche mit anpassbaren Layouts
  • Konsistente Schubladen-Erfahrungen über Geräte hinweg
  • Integration von Material Design-Navigationsmustern
  • Administrations-Dashboards mit Seitenleistenmenüs erstellen

Hauptmerkmale

  • Material Design-konform
  • Passt sich automatisch an die Bildschirmgröße an
  • Einklappbare und ausklappbare Zustände
  • Glatte Übergangsanimationen
  • Einfache Integration in bestehende Flutter-Apps

Geeignet für

  • Entwickler, die responsive Flutter-Apps erstellen
  • Teams, die Material Design-Konsistenz priorisieren
  • Projekte, die anpassbare Navigationsstrukturen benötigen
  • Apps, die sich an mehrere Geräteformfaktoren richten

Hinweise

  • Eingeschränkte Anpassung über Material Design hinaus
  • Keine integrierte Unterstützung für RTL-Layouts
  • Benötigt manuelle Zustandsverwaltung
  • Nicht für komplexe verschachtelte Navigation optimiert

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

Buy Me A Coffee Donate

mobile_sidebar

A Flutter plugin to show a sidebar on tablet and desktop then a list or gridview on mobile.

Demo here.

Screenshots

Example

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

import 'package:mobile_sidebar/mobile_sidebar.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.light(),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int index = 0;
  bool searching = false;
  bool _loggedIn = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: MobileSidebar(
        currentIndex: index,
        onTabChanged: (val) {
          if (mounted)
            setState(() {
              index = val;
            });
        },
        isSearching: searching,
        isSearchChanged: (val) {
          if (mounted)
            setState(() {
              searching = val;
            });
        },
        titleBuilder: (context) {
          return FancyTitle(
            title: Text("My Logo"),
            logo: FlutterLogo(),
          );
        },
        accountBuilder: (context) {
          if (_loggedIn) {
            return Padding(
              padding: const EdgeInsets.all(8.0),
              child: InkWell(
                onTap: () {
                  if (mounted)
                    setState(() {
                      _loggedIn = false;
                    });
                },
                child: CircleAvatar(
                  child: Icon(Icons.person),
                ),
              ),
            );
          }
          return FlatButton(
            child: Text("Sign In"),
            onPressed: () {
              if (mounted)
                setState(() {
                  _loggedIn = true;
                });
            },
          );
        },
        showSearchButton: true,
        tabs: <TabChild>[
          TabChild(
            icon: Icon(Icons.bluetooth),
            title: 'Light Blue',
            builder: (context) => NewScreen(
              color: Colors.lightBlue,
              name: 'Light Blue Screen',
            ),
          ),
          TabChild(
            icon: Icon(Icons.info),
            title: 'Light Green',
            builder: (context) => NewScreen(
              color: Colors.lightGreen,
              name: 'Light Green Screen',
            ),
          ),
          TabChild(
            icon: Icon(Icons.person),
            title: 'Red',
            builder: (context) => NewScreen(
              color: Colors.red,
              name: 'Red Screen',
            ),
          ),
          TabChild(
            icon: Icon(Icons.info),
            title: 'Light Green 3',
            builder: (context) => NewScreen(
              color: Colors.lightGreen,
              name: 'Light Green Screen',
            ),
          ),
          TabChild(
            icon: Icon(Icons.person),
            title: 'Red 3',
            builder: (context) => NewScreen(
              color: Colors.red,
              name: 'Red Screen',
            ),
          ),
          TabChild(
            icon: Icon(Icons.info),
            title: 'Light Green 4',
            builder: (context) => NewScreen(
              color: Colors.lightGreen,
              name: 'Light Green Screen',
            ),
          ),
          TabChild(
            icon: Icon(Icons.person),
            title: 'Red 4',
            builder: (context) => NewScreen(
              color: Colors.red,
              name: 'Red Screen',
            ),
          ),
        ],
      ),
    );
  }
}

class FancyTitle extends StatelessWidget {
  const FancyTitle({
    Key key,
    @required this.title,
    this.logo,
  }) : super(key: key);

  final Widget title;
  final Widget logo;

  @override
  Widget build(BuildContext context) {
    if (logo == null) {
      return logo;
    }
    return Row(
      children: <Widget>[
        logo,
        Container(width: 4.0),
        title,
      ],
    );
  }
}

class NewScreen extends StatelessWidget {
  const NewScreen({
    Key key,
    @required this.color,
    @required this.name,
  }) : super(key: key);

  final Color color;
  final String name;

  @override
  Widget build(BuildContext context) {
    return Container(
      color: color,
      child: Center(
        child: RaisedButton.icon(
          icon: Icon(Icons.arrow_right),
          label: Text("Push to Screen"),
          onPressed: () {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (_) => Scaffold(
                appBar: AppBar(),
                body: NewScreen(color: color, name: name),
              ),
            ));
          },
        ),
      ),
    );
  }
}

Kategorien

Abhängigkeiten

Abhängigkeiten 1 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.