[FLUTTER]: что-то не так с пакетом PersistentBottomNavBar

У меня была еще одна проблема до использования пакета «Provider» с пакетом «PersistentBottomNavBar» в моем приложении флаттера. Поэтому, решив эту проблему, я сразу же получил другую. Есть мой исходный код. Когда я запускаю этот код, мой эмулятор Android падает. Со следующим сообщением об ошибке: Метод «карта» был вызван при нулевом значении. Получатель: ноль. Пробовал вызывать: map(Closure: (PersistentBottomNavBarItem) => Flexible)

import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:persistent_bottom_nav_bar/persistent-tab-view.dart';

import './screens/products_list_screen.dart';
import './screens/add_product_screen.dart';
import './screens/profile_screen.dart';

import './providers/products.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);

  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(
          create: (_) => Products(),
        ),
      ],
      child: MaterialApp(
        title: 'Sample App',
        debugShowCheckedModeBanner: false,
        theme: ThemeData(
          primarySwatch: Colors.blueGrey,
          accentColor: Colors.grey[700],
        ),
        home: MyApp(),
      ),
    ),
  );
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  PersistentTabController _tabController =
      PersistentTabController(initialIndex: 0);
  bool _hideNavBar = false;

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    _tabController.dispose();
  }

  List<Widget> _buildScreens() {
    return [ProductsListScreen(), AddProductScreen(), ProfileScreen()];
  }

  List<PersistentBottomNavBarItem> _navBarItems() {
    return [
      PersistentBottomNavBarItem(
        icon: Icon(CupertinoIcons.list_bullet),
        title: 'Products',
        activeColor: CupertinoColors.activeBlue,
        inactiveColor: CupertinoColors.systemGrey,
      ),
      PersistentBottomNavBarItem(
        icon: Icon(CupertinoIcons.add),
        title: 'Add',
        activeColor: CupertinoColors.activeBlue,
        inactiveColor: CupertinoColors.systemGrey,
      ),
      PersistentBottomNavBarItem(
        icon: Icon(CupertinoIcons.profile_circled),
        title: 'Profile',
        activeColor: CupertinoColors.activeBlue,
        inactiveColor: CupertinoColors.systemGrey,
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return PersistentTabView(
      context,
      controller: _tabController,
      screens: _buildScreens(),
      items: _navBarItems(),
    );
  }
}

В моем эмуляторе Android есть ошибка:

И ошибка консоли отладки в моем VCode:

1
0
679
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, проблема в том, что вы не передаете navBarStyle в PersistentTabView. Существуют различные стили NavBarStyle для выбора, и каждый из них имеет другие значения, которые им требуются. Пожалуйста, обратитесь к документации «persist_bottom_nav_bar» для получения дополнительной информации. Пожалуйста, внесите следующие изменения в свой код и проверьте. Примечание NavBarStyle.style7 может быть не тем navBarStyle, который вы искали, поэтому попробуйте другие.

.....
return Scaffold(
  body: PersistentTabView(
    context,
    controller: _tabController,
    screens: _buildScreens(),
    items: _navBarsItems(),
    navBarStyle: NavBarStyle.style7,
  ),
....

Другие вопросы по теме