Я продолжаю получать сообщение об ошибке, что заголовок, параметр «заголовок» не может иметь значение «нуль», но неявное значение по умолчанию равно нулю, и то же самое касается фона и значка,

Пожалуйста, я не уверен, поскольку я новичок во Flutter, откуда возникла проблема, может кто-нибудь помочь мне проверить, откуда мои ошибки. Заранее спасибо.

Это мой файл main.dart,

import 'package:simpleapp/models/sidebar.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

//stless - stateless widget..

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {

    return MaterialApp(
        home: Scaffold(
            body: Center(
                child: SidebarRow(item: sidebarItem[0]),  //where i called the item
            ),    
        ),    
    );

  }
}

class SidebarRow extends StatelessWidget {
  
  SidebarRow({required this.item});   

  final SidebarItem item;

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Container(
            width: 42.0,
            height: 42.0,
            padding: EdgeInsets.all(10.0),
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(14.0),
              gradient: item.background,
            ),
            child: item.icon),

        SizedBox(width: 12), // used for spacing..

        Container(
          child: Text(
            item.title,
            style: TextStyle(
                fontSize: 16.0,
                fontWeight: FontWeight.w800,
                color: Color(0xff242629)),
          ),
        ),
      ],
    );
  }
}

The sidebar.dart — файл класса SidebarItem с дополнительными демонстрационными данными

import 'package:flutter/material.dart';

class SidebarItem {

  //how can i initialize this class to accept null values.. 

  SidebarItem({ this.title, this.background, this.icon }); 

  String title;
  LinearGradient background;
  Icon icon;

}

//add sample data...

var sidebarItem = [

  SidebarItem(
      title: "Home",
      background: LinearGradient(
        begin: Alignment.topLeft,
        end: Alignment.bottomRight,
        colors: [
          Color(0xFF00AEFF),
          Color(0xFF0076FF),
        ],
      ),
      icon: Icon(Icons.home, color: Colors.white)
)];

Пожалуйста, как я могу отсортировать эти ошибки и заставить переменные правильно инициализироваться, а не устанавливаться в ноль. Спасибо.

0
Ande Caleb 11 Янв 2022 в 18:58

3 ответа

Лучший ответ

Здесь у вас есть два примера:

Если каждая переменная экземпляра будет инициализирована (ваш случай):

  • Добавьте необходимое ключевое слово в именованные параметры
class SidebarItem {
   String title;
   LinearGradient background;
   Icon icon;

  const SidebarItem({
    required this.title,
    required this.background,
    required this.icon,
  });
}

Или константа, если она не будет мутировать

class SidebarItem {
  final String title;
  final LinearGradient background;
  final Icon icon;

  SidebarItem({
    required this.title,
    required this.background,
    required this.icon,
  });
}

Если каждая переменная экземпляра может быть нулевой

class SidebarItem {
  String? title;
  LinearGradient? background;
  Icon? icon;
  
  SidebarItem({
    this.title,
    this.background,
    this.icon,
  });
}
2
Juan Carlos Ramón Condezo 11 Янв 2022 в 19:08

Добавьте ? для необязательных полей. Добавьте required для обязательных параметров

class SidebarItem {

  SidebarItem({ this.title, required this.background, required this.icon }); 

  String? title;
  LinearGradient background;
  Icon icon;

}
1
Karim 11 Янв 2022 в 19:09

См. объяснение установки значений, допускающих значение NULL, здесь

В вашем случае вам не хватает ключевого слова required перед параметром в объявлении конструктора

1
Olga P 11 Янв 2022 в 19:09