Home > Net >  Expected a value of type 'Widget', but got one of type 'Null'
Expected a value of type 'Widget', but got one of type 'Null'

Time:10-18

i am learning responsive web but i am stuck here in some kind of error like

Expected a value of type 'Widget', but got one of type 'Null'

don't know how to fix this error i tried a lot but i think i can't solve this without someone's help.

import 'package:flutter/material.dart';

const int largeScreenSize = 1366;
const int mediumScreenSize = 768;
const int smallScreenSize = 360;
const int customScreenSize = 1100;

class Responsiveness extends StatelessWidget {
   final Widget? largeScreen;
   final Widget? mediumScreen;
   final Widget? smallScreen;

   const Responsiveness({
    this.largeScreen,
    this.mediumScreen,
    this.smallScreen,
  });

   @override
   Widget build(BuildContext context) {
     return LayoutBuilder(builder: (context, constraints) {
       double _width = constraints.maxWidth;
        if (_width >= largeScreenSize) {
         return largeScreen as Widget;
       } else if (_width >= mediumScreenSize && _width < largeScreenSize) {
         return mediumScreen ?? largeScreen as Widget;
       } else {
         return smallScreen ?? largeScreen as Widget;
       }
     });
   }
 }

CodePudding user response:

largeScreen, mediumScreen and smallScreen all have the type Widget?, meaning: "either a Widget or null.

When you return largeScreen as Widget, if largeScreen is null, you will get an error, because null is not a valid value for Widget (just like 123 as String would throw, since the types are not assignable).

Looking at your code, if all 3 of those variables are null, you'd eventually try to return null from the LayoutBuilder parameter, which is always an error, because it returns a non-null Widget.

Make sure you account for the case where all of these are null, or make sure they are never all null at the same time (perhaps with an assert statement).

  • Related