Как «активировать» настраиваемую нижнюю панель во флаттере? - PullRequest
0 голосов
/ 18 октября 2019

Флаттер для меня пока не естественен и надеялся, что вы, ребята, сможете мне помочь. Я создаю приложение карты с bottomNavigationBar и использую для этого пакет с именем round_bottom_navigation 1.0.1, который вы можете найти по ссылке ниже.

https://pub.dev/packages/circular_bottom_navigation#-readme-tab-

Мне удалось отобразить панель, но у меня есть несколько проблем, которые меня расстраивают.

Я добавил следующую строку в Обратный вызов

CircularBottomNavigationController _navigationController = 
new CircularBottomNavigationController(selectedPos);

, но я не знаю, какиспользуйте следующий

// Write a new value 
_navigationController.value = 0;

// Read the latest value
int latest = _navigationController.value;

Как вы узнаете, панель еще не активна.

Кроме того, если вы посмотрите на скриншот, вы заметите, что карта останавливается в верхней частизначок и не виден на панели. Я бы хотел, чтобы карта достигла вершины бара, поэтому значки наложены друг на друга.

Screenshot of map with Bottom Bar

1 Ответ

0 голосов
/ 18 октября 2019
import 'dart:async';

import 'package:circular_bottom_navigation/circular_bottom_navigation.dart';
import 'package:circular_bottom_navigation/tab_item.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Google Maps Demo',
      home: MapSample(),
    );
  }
}

class MapSample extends StatefulWidget {
  @override
  State<MapSample> createState() => MapSampleState();
}

class MapSampleState extends State<MapSample> {
  Completer<GoogleMapController> _controller = Completer();

  static final CameraPosition _kGooglePlex = CameraPosition(
    target: LatLng(37.42796133580664, -122.085749655962),
    zoom: 14.4746,
  );

  List<TabItem> tabItems = List.of([
    new TabItem(Icons.home, "Home", Colors.blue, labelStyle: TextStyle(fontWeight: FontWeight.normal)),
    new TabItem(Icons.search, "Search", Colors.orange, labelStyle: TextStyle(color: Colors.red, fontWeight: FontWeight.bold)),
    new TabItem(Icons.layers, "Reports", Colors.red),
    new TabItem(Icons.notifications, "Notifications", Colors.cyan),
  ]);

  static final CameraPosition _kLake = CameraPosition(
      bearing: 192.8334901395799,
      target: LatLng(37.43296265331129, -122.08832357078792),
      tilt: 59.440717697143555,
      zoom: 19.151926040649414);

  CircularBottomNavigationController _navigationController = new CircularBottomNavigationController(0);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: _kGooglePlex,
        onMapCreated: (GoogleMapController controller) {
          _controller.complete(controller);
        },
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: _goToTheLake,
        label: Text('To the lake!'),
        icon: Icon(Icons.directions_boat),
      ),
      extendBody: true,
      bottomNavigationBar: CircularBottomNavigation(
        tabItems,
        controller: _navigationController,
        selectedCallback: (int selected) {
          _navigationController.value = selected;
        },
      ),
    );
  }

  Future<void> _goToTheLake() async {
    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(_kLake));
  }
}

вы должны передать exteBody: true для скаффолда

enter image description here

...