ボタンを押すと警告メッセージを表示するボタンを使ってアプリを作成しようとしていました。
しかし、それは私にこのエラーを与えます(後述)。
私はこのコードを参照して この ビデオを参照して書きました。
ADB Connectを使用してライブAndroid電話でアプリケーションを実行しています
助けてください..!
コード
_import 'package:flutter/material.Dart';
void main(){
runApp(MyApp());
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Test",
home: Scaffold(
appBar: AppBar(title: Text("Test")),
body: Container(
child: Center(
child: RaisedButton(
color: Colors.redAccent,
textColor: Colors.white,
onPressed: (){testAlert(context);},
child: Text("PressMe"),
),
),
),
),
);
}
void testAlert(BuildContext context){
var alert = AlertDialog(
title: Text("Test"),
content: Text("Done..!"),
);
showDialog(
context: context,
builder: (BuildContext context){
return alert;
}
);
}
}
_
これは私が書いたコードです。また、TestAlert()関数の内容を減圧に直接挿入してみましたが機能しません。
エラー
_Performing hot reload...
Syncing files to device ZUK Z2131...
Reloaded 0 of 419 libraries in 1,929ms.
I/flutter (18652): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter (18652): The following assertion was thrown while handling a gesture:
I/flutter (18652): No MaterialLocalizations found.
I/flutter (18652): MyApp widgets require MaterialLocalizations to be provided by a Localizations widget ancestor.
I/flutter (18652): Localizations are used to generate many different messages, labels,and abbreviations which are used
I/flutter (18652): by the material library.
I/flutter (18652): To introduce a MaterialLocalizations, either use a MaterialApp at the root of your application to
I/flutter (18652): include them automatically, or add a Localization widget with a MaterialLocalizations delegate.
I/flutter (18652): The specific widget that could not find a MaterialLocalizations ancestor was:
I/flutter (18652): MyApp
I/flutter (18652): The ancestors of this widget were:
I/flutter (18652): [root]
I/flutter (18652):
I/flutter (18652): When the exception was thrown, this was the stack:
I/flutter (18652): #0 debugCheckHasMaterialLocalizations.<anonymous closure> (package:flutter/src/material/debug.Dart:124:7)
I/flutter (18652): #1 debugCheckHasMaterialLocalizations (package:flutter/src/material/debug.Dart:127:4)
I/flutter (18652): #2 showDialog (package:flutter/src/material/dialog.Dart:635:10)
I/flutter (18652): #3 MyApp.testAlert (package:flutter_app/main.Dart:33:5)
I/flutter (18652): #4 MyApp.build.<anonymous closure> (package:flutter_app/main.Dart:19:29)
I/flutter (18652): #5 _InkResponseState._handleTap (package:flutter/src/material/ink_well.Dart:507:14)
I/flutter (18652): #6 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.Dart:562:30)
I/flutter (18652): #7 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.Dart:102:24)
I/flutter (18652): #8 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.Dart:242:9)
I/flutter (18652): #9 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.Dart:175:7)
I/flutter (18652): #10 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.Dart:315:9)
I/flutter (18652): #11 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.Dart:73:12)
I/flutter (18652): #12 PointerRouter.route (package:flutter/src/gestures/pointer_router.Dart:101:11)
I/flutter (18652): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.Dart:180:19)
I/flutter (18652): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.Dart:158:22)
I/flutter (18652): #15 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.Dart:138:7)
I/flutter (18652): #16 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.Dart:101:7)
I/flutter (18652): #17 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.Dart:85:7)
I/flutter (18652): #18 _invoke1 (Dart:ui/hooks.Dart:168:13)
I/flutter (18652): #19 _dispatchPointerDataPacket (Dart:ui/hooks.Dart:122:5)
I/flutter (18652):
I/flutter (18652): Handler: onTap
I/flutter (18652): Recognizer:
I/flutter (18652): TapGestureRecognizer#d5d82(debugOwner: GestureDetector, state: possible, won arena, finalPosition:
I/flutter (18652): Offset(220.2, 406.1), sent tap down)
I/flutter (18652): ════════════════════════════════════════════════════════════════════════════════════════════════════
W/ActivityThread(18652): handleWindowVisibility: no activity for token Android.os.BinderProxy@59b4e8d
I/ViewRootImpl(18652): CPU Rendering VSync enable = true
_
これは、GlobalMaterialLocalizations
delegateでサポートされていない言語に切り替えると起こります。それはあなたのツリーの上部にMaterialApp
を持つべきであるが、それはすでに存在しているかもしれないと言っているので、理解するのはトリッキーなメッセージです。
私の訴訟では、私がローカライズしていた言語(イギリスのwelsh - cy-GB
)は自動的には役立ちません。私は自分のデリゲートをボイラープレート文字列に書いて、それを私のアプリのルートで局所的なリストに追加しなければなりませんでした。
ベラルーシの代理人のコードは ここで です。私はそれをウェールズの言語に応えるように適応しました。 「すべて選択」、「PAGE <x>の「<y>」など、重要なデザインが必要と思われる、日付の書式設定情報と約70株フレーズが含まれています。
グローバルマテリアルローカライズに記載されていない言語をカバーするデリゲートを作成する必要がある場合は、デリゲートを作成したら、コードベースで、そしてツリーの一番上のどこかに、あなたはのような行を持つでしょう。
MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''), // English, no country code
const Locale('he', ''), // Hebrew, no country code
const Locale.fromSubtags(languageCode: 'zh')
],
// ...
)
CyMaterialLocalizations.delegate
(または新しい言語の代理人を呼び出すものは何でも)をlocalizationsDelegates
リストに追加するだけです。
showTimePicker
RaisedButton
の内部には同じ問題があります。
私は次のように再構築しました:
runApp
|__MaterialApp
|__ StatefulWidget/StatelessWidget
|__SafeArea
|__Scaffold
|__ RaisedButton
|__ showTimePicker
_
これが作業されたソリューションのサンプルです。
import 'package:flutter/material.Dart';
import 'package:flutter_localizations/flutter_localizations.Dart';
void main() {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', 'US'),
],
home: Sample(),
),
);
}
class Sample extends StatefulWidget {
@override
_SampleState createState() => _SampleState();
}
class _SampleState extends State<Sample> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Center(
child: RaisedButton(
child: Text('Time Picker'),
onPressed: () {
showTimePicker(
context: context,
initialTime: TimeOfDay(hour: 10, minute: 47),
builder: (BuildContext context, Widget child) {
return MediaQuery(
data: MediaQuery.of(context)
.copyWith(alwaysUse24HourFormat: true),
child: child,
);
},
);
},
),
),
),
);
}
}
_