flutter / flutter

Flutter makes it easy and fast to build beautiful apps for mobile and beyond
https://flutter.dev
BSD 3-Clause "New" or "Revised" License
162.65k stars 26.76k forks source link

Assert error when using AND operator #148362

Closed Pachebel closed 3 weeks ago

Pachebel commented 3 weeks ago

Steps to reproduce

Expected results

We are giving the text parameter to AssertTestWidget, so the condition on assert text == null && alternativeText == null, arent true.

By the way, flutter still shows error ignoring the AND operator.

Actual results

I'm getting the red error page

Code sample

Code sample ```dart import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), home: const MyHomePage(), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key}); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Assert error'), ), body: AssertTestWidget(text: 'opa'), ); } } class AssertTestWidget extends StatelessWidget { final String? text; final String? alternativeText; const AssertTestWidget({ super.key, this.text, this.alternativeText, }) : assert( text == null && alternativeText == null, 'You must provide either a text or an alternativeText', ); @override Widget build(BuildContext context) { return SizedBox( height: 100, width: MediaQuery.of(context).size.width * 0.3, child: Card( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if (alternativeText != null) Center(child: Text(alternativeText!)), if (text != null) Text( overflow: TextOverflow.ellipsis, text!, ), ], ), ), ); } } ```

Screenshots or Video

Screenshots / Video demonstration ![image](https://github.com/flutter/flutter/assets/89677437/910c6199-7bf5-4a69-af69-2a50f18da770)

Logs

Logs ```console The following assertion was thrown building MyHomePage(dirty, state: _MyHomePageState#51ffc): You must provide either a text or an alternativeText 'package:assert_test/main.dart': Failed assertion: line 47 pos 11: 'text == null && alternativeText == null' The relevant error-causing widget was: MyHomePage MyHomePage:file:///C:/Desktop/apps/assert_test/lib/main.dart:14:19 When the exception was thrown, this was the stack: #2 new AssertTestWidget (package:assert_test/main.dart:47:11) main.dart:47 #3 _MyHomePageState.build (package:assert_test/main.dart:33:13) main.dart:33 #4 StatefulElement.build (package:flutter/src/widgets/framework.dart:5599:27) framework.dart:5599 #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5487:15) framework.dart:5487 #6 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5650:11) framework.dart:5650 #7 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7) framework.dart:5203 #8 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5469:5) framework.dart:5469 #9 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5641:11) framework.dart:5641 #10 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5463:5) framework.dart:5463 ... Normal element mounting (228 frames) #238 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16) framework.dart:4340 #239 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6904:36) framework.dart:6904 #240 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6916:32) framework.dart:6916 ... Normal element mounting (489 frames) #729 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16) framework.dart:4340 #730 Element.updateChild (package:flutter/src/widgets/framework.dart:3849:18) framework.dart:3849 #731 _RawViewElement._updateChild (package:flutter/src/widgets/view.dart:291:16) view.dart:291 #732 _RawViewElement.mount (package:flutter/src/widgets/view.dart:314:5) view.dart:314 ... Normal element mounting (7 frames) #739 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16) framework.dart:4340 #740 Element.updateChild (package:flutter/src/widgets/framework.dart:3849:18) framework.dart:3849 #741 RootElement._rebuild (package:flutter/src/widgets/binding.dart:1581:16) binding.dart:1581 #742 RootElement.mount (package:flutter/src/widgets/binding.dart:1550:5) binding.dart:1550 #743 RootWidget.attach. (package:flutter/src/widgets/binding.dart:1503:18) binding.dart:1503 #744 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2845:19) framework.dart:2845 #745 RootWidget.attach (package:flutter/src/widgets/binding.dart:1502:13) binding.dart:1502 #746 WidgetsBinding.attachToBuildOwner (package:flutter/src/widgets/binding.dart:1239:27) binding.dart:1239 #747 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:1221:5) binding.dart:1221 #748 WidgetsBinding.scheduleAttachRootWidget. (package:flutter/src/widgets/binding.dart:1207:7) binding.dart:1207 #752 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12) isolate_patch.dart:184 (elided 5 frames from class _AssertionError, class _Timer, and dart:async-patch) ```

Flutter Doctor output

Doctor output ```console Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 3.22.0, on Microsoft Windows [versÆo 10.0.22631.3527], locale pt-BR) [√] Windows Version (Installed version of Windows is version 10 or higher) [√] Android toolchain - develop for Android devices (Android SDK version 35.0.0-rc3) [√] Chrome - develop for the web [√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.6) [√] Android Studio (version 2023.2) [√] Connected device (3 available) [√] Network resources • No issues found! ```
danagbemava-nc commented 3 weeks ago

This is a logical issue not necessarily an issue with flutter or the assert condition. Your condition should be text != null || alternativeText != null.

If you evaluate text == null && alternativeText == null with the opa value provided, it evaluates to false (which is the condition required for the assert to fire).

See https://dart.dev/language/error-handling#assert for more info about assert.

Closing from here as this is not a flutter issue.

Thank you

github-actions[bot] commented 1 week ago

This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.