flutter 返回带有空安全帮助的空微件

8ljdwjyq  于 2023-03-09  发布在  Flutter
关注(0)|答案(3)|浏览(158)

我一直在学习教程,由于flutter当前版本中的null安全性,我无法返回任何空值,但需要动态返回自定义页面设计

import 'package:flutter/material.dart';

class BasePage extends StatefulWidget {
  const BasePage({super.key});

  @override
  State<BasePage> createState() => BasePageState();
}

class BasePageState<T extends BasePage> extends State<T> {
  bool isApiCallProcess = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(preferredSize: const Size.fromHeight(70.0), child: _buildAppBAr()),
      body: ProgressHUD(
        inAsyncCall: isApiCallProcess,
        opacity: 0.3,
        child: pageUI(),
      ),
    );
  }
}

Widget pageUI() {
  return null;
}

Widget _buildAppBAr() {
  return AppBar(
    centerTitle: true,
    elevation: 0,
    backgroundColor: Colors.yellow[800],
    automaticallyImplyLeading: false,
    title: const Text(
      'Kem-D Batteries',
      style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 20),
    ),
    actions: const [
      Icon(
        Icons.notifications_none,
        color: Colors.white,
      ),
      SizedBox(
        width: 10,
      ),
      Icon(
        Icons.shopping_cart,
        color: Colors.white,
      ),
      SizedBox(
        width: 10,
      ),
    ],
  );
}

Widget pageUI() {
  return null;
}

当我将小部件置空时,由于子小部件中的pageUI()无法分配给非空小部件,因此出现运行时错误。
我厌倦了pageUI()!不起作用,就像

Widget pageUI() {
  return null!;
}

也不起作用。任何帮助将不胜感激。
我厌倦了pageUI()!不工作,就像

Widget pageUI() {
  return null!;
}

也不管用。
我想显示与其唯一ID相关的产品,下面的代码用于按ID显示类别

import 'package:flutter/material.dart';
import 'base_page.dart';

class ProductPage extends BasePage {
const ProductPage({Key? key, required this.catgeoryId}) :  super(key: key);

final int catgeoryId;

@override
// ignore: library_private_types_in_public_api
_ProductPageState createState() => _ProductPageState();
 }

class _ProductPageState extends BasePageState<ProductPage> {
@override
Widget pageUI() {
return Container(
  child: Text(
    widget.catgeoryId.toString(),
  ),
 );
 }
}
scyqe7ek

scyqe7ek1#

有两个改动要做。

1. Widget? pageUI() { // make returnType nullable
  return null;
}

调用时使用??运算符

2. body: ProgressHUD(
        inAsyncCall: isApiCallProcess,
        opacity: 0.3,
        child: pageUI() ?? Container(), // This is important
      ),
deyfvvtc

deyfvvtc2#

使用运算符?使函数的返回类型可为null,这样就可以返回null。

Widget? pageUI() {
  return null;
}
hc2pp10m

hc2pp10m3#

你可以回来

return const SizedBox.shrink();

相关问题