#flutter #material-design #flutter-cupertino
Вопрос:
Я провел долгое исследование в Интернете об этом (что я считаю вредным) использовании Material
виджета во flutter, любой разработчик flutter сталкивался с No Material widget found.
исключением даже при использовании виджетов дизайна купертино.
Простой пример, который нужно привести, это
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class Example extends StatelessWidget {
const Example({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text('Example'),
leading: IconButton(
onPressed: () {},
icon: Icon(
Icons.close,
color: Colors.black54,
),
),
),
child: Center(
child: IconButton(
onPressed: () {},
icon: Icon(
Icons.close,
color: Colors.black54,
),
),
),
);
}
}
Ни navigationBar
то, ни body
IconButton
другое не будет работать, что приведет к одному и тому же исключению.
Сталкиваясь с этим исключением, я всегда заворачиваю его внутрь Material
, чтобы обойти его, но я думаю, что делаю это неправильно. IconButton
это не единственный виджет, и я много искал безрезультатно.
Пожалуйста, скажите мне, что я упускаю ? и заранее спасибо.
Комментарии:
1. @Faizan Дарвеш и @JaffaKetchup никто не знает, что флаттер не знает о
MaterialApp
том, что вопрос заключается в его замене, и это похоже на потомковMaterial
, потому что от них зависит много нематериальных виджетов, таких какIconButton
2. У меня тоже есть такой же вопрос по этому поводу. Когда я использую
MaterialApp
=> >CupertinoTabScaffold
и используюTextField
, он показывает ошибку, подобную этой, виджеты текстового поля требуют, чтобы материальная локализация была предоставлена предком виджета локализации. Библиотека материалов использует локализации для создания сообщений, надписей и сокращений. . У кого-нибудь есть какое-нибудь решение ? Спасибо.
Ответ №1:
Не уверен насчет части Купертино, но (afaik) вам нужно обернуть свое приложение, MaterialApp()
чтобы получить доступ к виджетам материалов и другим методам и т.д.
Ответ №2:
Вам нужно обернуть свой корневой виджет, MaterialApp()
чтобы вы могли получить доступ к компонентам материала.
Например,
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}